ONVIF: Authentication failure with SNC-CH110 using ONVIF protocol

У меня камера SNC-CH110 от Sony. Пользователь по умолчанию 'admin' и пароль тоже 'admin'. Моя большая проблема заключается в аутентификации.


    
        SOAP-ENV:Sender
        
            ter:NotAuthorized
        
    
    
        Sender not Authorized
    
    
        The action requested requires authorization and the sender is not authorized
        
    

Согласно спецификации ONVIF 1.02, я использую "профиль токена имени пользователя" для аутентификации, который описан в спецификации http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf или в http://www.onvif.org/Portals/0/documents/WhitePapers/ONVIF_WG-APG-Application_Programmer%27s_Guide.pdf

Ниже приведен скрипт, который я использую для формирования мыльного запроса:



     
        
             
                admin
                " + hashBase64 + @" 
                " + Convert.ToBase64String(_nonce) + @" 
                " + dt + @" 
             
         
    
     
         
            All 
         
     
"

Вот мой код для отправки запроса:

byte[] _nonce = new byte[16];
RandomNumberGenerator rndGenerator = new RNGCryptoServiceProvider();
rndGenerator.GetBytes(_nonce);

// get other operands to the right format
string dt = DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ss.fffZ");
byte[] time = Encoding.UTF8.GetBytes(dt);
byte[] pwd = Encoding.UTF8.GetBytes("admin");
byte[] operand = new byte[_nonce.Length + time.Length + pwd.Length];
Array.Copy(_nonce, operand, _nonce.Length);
Array.Copy(time, 0, operand, _nonce.Length, time.Length);
Array.Copy(pwd, 0, operand, _nonce.Length + time.Length, pwd.Length);

// create the hash
SHA1 sha1 = SHA1.Create();
string hashBase64 = Convert.ToBase64String(sha1.ComputeHash(operand));

XmlDocument xml = new XmlDocument();
xml.Load("../../../xml/GetCapabilities.xml");
Communication.SendTcpXml(xml.InnerXml, new Uri("http://192.168.1.25/onvif/device_service"));

Я действительно запутался, потому что не могу найти ошибку. Очень интересно, что когда я использую дату, пароль, nonce и имя пользователя из программы ONVIF Device Manager (я взял его через Wireshark), то у меня все получается. Но я не понимаю, как эта программа хэширует пароль, потому что я делаю это точно по спецификации, и когда я использую ту же дату, nonce и пароль, я не могу получить такой же хэшированный пароль, как эта программа. Я буду благодарен за любую помощь, спасибо.

6
задан Hyen 25 February 2012 в 18:30
поделиться