2011-03-03 10 views
7

पहले उपयोगकर्ता को बनाया गया था (उपयोगकर्ता नाम "रूट" और पासवर्ड "रूट" के साथ मेरे मामले में), एक्सिस पी 3301 (फर्मवेयर 5.11.2) वापस नहीं प्राधिकृत साबुन गलती, किसी भी ONVIF-अनुरोध के लिए:ONVIF: ONVIF प्रोटोकॉल का उपयोग कर एक्सिस पी 3301 के साथ प्रमाणीकरण विफलता

<SOAP-ENV:Fault 
    SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding" 
    xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"> 
    <SOAP-ENV:Code> 
     <SOAP-ENV:Value>SOAP-ENV:Sender</SOAP-ENV:Value> 
     <SOAP-ENV:Subcode> 
      <SOAP-ENV:Value>ter:NotAuthorized</SOAP-ENV:Value> 
     </SOAP-ENV:Subcode> 
    </SOAP-ENV:Code> 
    <SOAP-ENV:Reason> 
     <SOAP-ENV:Text xml:lang="en">Sender not authorized</SOAP-ENV:Text> 
    </SOAP-ENV:Reason> 
    <SOAP-ENV:Detail> 
     The action requested requires authorization and the sender is not authorized 
    </SOAP-ENV:Detail> 
</SOAP-ENV:Fault> 
ONVIF विनिर्देश 1.02 के अनुसार

, मैं प्रमाणीकरण जो विनिर्देश http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf में वर्णन किया गया के लिए उपयोगकर्ता नाम टोकन प्रोफ़ाइल का उपयोग करें।

static byte[] sha1(params byte[][] parts) { 
    var data = parts.Concat().ToArray(); 
    var hasher = SHA1.Create(); 
    return hasher.ComputeHash(data); 
} 

static string userName = "root"; 
static string password = "root"; 

static void Main(string[] args) { 
    Init(); 
    var uri = @"http://192.168.5.71/onvif/services"; 
    var nonce = new byte[] {1,2,3,4}; 
    var created = System.DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddThh:mm:ss.fffZ"); 
    try { 
     var body = SendSoapRequest(uri, "GetDeviceInformation.xq", new { 
      userName = userName, 
      passwordDigest = sha1(
       nonce, 
       created.ToUtf8(), 
       password.ToUtf8() 
      ).ToBase64(), 
      nonce = nonce.ToBase64(), 
      created = created, 
     }); 

     using (var _w = new XmlTextWriter(Console.Out)) { 
      _w.Formatting = Formatting.Indented; 
      body.WriteTo(_w); 
     } 
    }catch(SoapFaultException err){ 
     var fault = err.fault; 
     using (var _w = new XmlTextWriter(Console.Out)) { 
      _w.Formatting = Formatting.Indented; 
      fault.WriteTo(_w); 
     } 
    } 
} 

Wireshark अनुरोध के लॉग:

<s:Envelope 
    xmlns:s="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Header> 
     <o:Security 
      xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
      s:mustUnderstand="true"> 
      <o:UsernameToken u:Id="UsernameToken-3ae8d972-d014-47b0-858b-2364f6119763"> 
       <o:Username>root</o:Username> 
       <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">MQ52wETdmCuGHmCsYED3FGrQ0UE=</o:Password> 
       <o:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">AQIDBA==</o:Nonce> 
       <u:Created>2011-03-03T12:23:28.499Z</u:Created> 
      </o:UsernameToken> 
     </o:Security> 
    </s:Header> 
    <s:Body> 
     <tds:GetDeviceInformation xmlns:tds="http://www.onvif.org/ver10/device/wsdl" /> 
    </s:Body> 
</s:Envelope> 

xquery version "1.0"; 
declare copy-namespaces no-preserve, inherit; 
<s:Envelope 
    xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
    xmlns:s="http://www.w3.org/2003/05/soap-envelope"> 

    <s:Header> 
     <o:Security 
      s:mustUnderstand="true" 
      xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 

      <o:UsernameToken u:Id="UsernameToken-3ae8d972-d014-47b0-858b-2364f6119763"> 
       <o:Username>{model/userName/text()}</o:Username> 
       <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"> 
        {model/passwordDigest/text()} 
       </o:Password> 
       <o:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"> 
        {model/nonce/text()} 
       </o:Nonce> 
       <u:Created>{model/created/text()}</u:Created> 
      </o:UsernameToken> 

     </o:Security> 
    </s:Header> 

    <s:Body> 
     <tds:GetDeviceInformation xmlns:tds="http://www.onvif.org/ver10/device/wsdl" /> 
    </s:Body> 

</s:Envelope> 

यहाँ अनुरोध भेजने के लिए अपने कोड है:

नीचे स्क्रिप्ट है कि मैं साबुन अनुरोध के रूप में इस्तेमाल करते हैं प्रतिक्रिया का वायरहार्क लॉग:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#" 
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
    xmlns:wsa5="http://www.w3.org/2005/08/addressing" 
    xmlns:xmime5="http://www.w3.org/2005/05/xmlmime" 
    xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2" 
    xmlns:wstop="http://docs.oasis-open.org/wsn/t-1" 
    xmlns:tt="http://www.onvif.org/ver10/schema" 
    xmlns:wsrf-r="http://docs.oasis-open.org/wsrf/r-2" 
    xmlns:tan1="http://www.onvif.org/ver10/analytics/wsdl/RuleEngineBinding" 
    xmlns:tan="http://www.onvif.org/ver10/analytics/wsdl" 
    xmlns:tan2="http://www.onvif.org/ver10/analytics/wsdl/AnalyticsEngineBinding" 
    xmlns:tds="http://www.onvif.org/ver10/device/wsdl" 
    xmlns:tev1="http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding" 
    xmlns:tev2="http://www.onvif.org/ver10/events/wsdl/EventBinding" 
    xmlns:tev3="http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding" 
    xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" 
    xmlns:tev4="http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding" 
    xmlns:tev="http://www.onvif.org/ver10/events/wsdl" 
    xmlns:timg="http://www.onvif.org/ver10/imaging/wsdl" 
    xmlns:tptz="http://www.onvif.org/ver10/ptz/wsdl" 
    xmlns:trt="http://www.onvif.org/ver10/media/wsdl" 
    xmlns:ter="http://www.onvif.org/ver10/error" 
    xmlns:tns1="http://www.onvif.org/ver10/topics" 
    xmlns:tnsaxis="http://www.axis.com/2009/event/topics"> 

    <SOAP-ENV:Header></SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> 
      <SOAP-ENV:Code> 
       <SOAP-ENV:Value>SOAP-ENV:Sender</SOAP-ENV:Value> 
       <SOAP-ENV:Subcode> 
        <SOAP-ENV:Value>ter:NotAuthorized</SOAP-ENV:Value> 
       </SOAP-ENV:Subcode> 
      </SOAP-ENV:Code> 
      <SOAP-ENV:Reason> 
       <SOAP-ENV:Text xml:lang="en">Sender not authorized</SOAP-ENV:Text> 
      </SOAP-ENV:Reason> 
      <SOAP-ENV:Detail>The action requested requires authorization and the sender is not authorized</SOAP-ENV:Detail> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

जहां मैं गलत था? (बॉश वीआईपी एक्स 1 एक्सएफ आईवीए के साथ यह काम करता है)

+3

एक्सिस के लोगों के साथ लंबी चर्चा के बाद, उन्होंने अनुमोदित किया कि यह बग है। जैसा कि वे स्पष्ट करते हैं, यह गलत व्यवहार गलत टाइमस्टैम्प सिंक्रनाइज़ेशन से प्रभावित है। रीप्ले हमले सुरक्षा के लिए इस प्रकार के सिंक्रनाइज़ेशन की आवश्यकता है। यह आवश्यक है कि डिवाइस और क्लाइंट ने समय सिंक्रनाइज़ किया हो। ONVIF अनुमत समय अंतर निर्दिष्ट नहीं करता है, लेकिन एक्सिस डिफ़ॉल्ट रूप से 5 सेकंड का उपयोग करता है। लेकिन यह संस्करण 5.11.2 में अच्छी तरह से काम नहीं करता है। उन्होंने जोर देकर कहा कि इसे अगले फर्मवेयर संस्करण 5.20 में तय किया जाएगा जो अगले कुछ दिनों में उपलब्ध होना चाहिए। –

+1

5.20 संस्करण में भी एक्सिस उपकरणों में रीप्ले-आक्रमण सुरक्षा को अक्षम करना संभव होगा। यह वेब इंटरफ़ेस का उपयोग करके किया जा सकता है: (सेटअप> सिस्टम ऑप्शन> उन्नत> प्लेनकॉन्फिग> वेबसाइट सेवा> "रीप्ले अटैक सुरक्षा सक्षम करें") –

+0

औरrey.ko - क्या आप कृपया मुझे कुछ संपर्क विवरण प्रदान कर सकते हैं जहां मैं कुछ अनुवर्ती- यूपीएस ? – thelost

उत्तर

1

मुझे नहीं लगता कि आप अपने साबुन लिफाफे में "टीडीएस" नेमस्पेस कहां निर्दिष्ट करते हैं (जो "http://www.onvif.org/ver10/device/wsdl" होना चाहिए)। मुझे एक ही समस्या थी: मेरे अनुरोध में एक टाइपो, और मेरे कैमरे ने "http 401 अधिकृत नहीं" के साथ उत्तर दिया।

संबंधित मुद्दे