2011-01-26 13 views
5

वेब सेवा व्यवस्थापक मुझे डबल्यूएसडीएल, दो प्रमाण पत्र और एक निजी कुंजी दिया:सी # में एचटीटीपीएस पर एसओएपी सेवा का उपभोग कैसे करें?

service.wsdl 
ssl.cer 
auth_cert.pem 
auth_private_key.pem 

विजुअल स्टूडियो 2010 मैं डबल्यूएसडीएल से एक वेब संदर्भ (सेवा संदर्भ काम नहीं किया) जोड़ा है। तब मैं इसका इस्तेमाल करने के रूप में यह एक http साबुन ग्राहक था की कोशिश की:

MySoapClient client = new MySoapClient(); 
client.Operation(); 

और मैं इस स्टैक ट्रेस प्राप्त:

Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel. 
    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

मैं प्रमाणपत्र और निजी कुंजी के साथ क्या करना है?
मुझे कोई भी ट्यूटोरियल नहीं मिल रहा है और न ही किताबें जो इस मामले को कवर करती हैं। कोई संकेत?

अद्यतन

फ़ायरफ़ॉक्स साथ अंत बिंदु तक पहुंचना:

SSL peer cannot verify your certificate. (Error code: ssl_error_bad_cert_alert)

+1

@Tommaso: यदि आप सेवा संदर्भ में इस्तेमाल किया जाना चाहिए था। क्या काम नहीं किया? –

+0

क्या सेवा एंडपॉइंट https कनेक्शन का समर्थन करता है? –

+0

@ जॉन सॉन्डर्स: "सेवा संदर्भ जोड़ें" एक 'खाली' ठूंठ उत्पन्न करता है: नाम स्थान घोषणा केवल – Tommaso

उत्तर

0

व्यवस्थापक आपको सर्वर पर सेटअप एसएसएल के लिए इस्तेमाल किया फ़ाइलों दे दिया है लगता है। आप C# प्रॉक्सी उत्पन्न करने के लिए WSDL.exe के माध्यम से service.wsdl को चलाने में सक्षम होना चाहिए, जो VS करता है जब आप वेब संदर्भ जोड़ते हैं। मुझे नहीं लगता कि यह आपकी समस्या है हालांकि। अपवाद एक सिस्टम स्तर मुद्दा देख रहा है क्योंकि अपवाद एक System.Net.WebException है।

अन्य फाइलें इस तरह दिखती हैं कि व्यवस्थापक सर्वर पर SSL जोड़ने के लिए उपयोग कर रहा था। निजी कुंजी साझा करके यदि वह इस कुंजी का उपयोग कर किसी भी एसएसएल-सक्षम सेवाओं को सुरक्षा से समझौता कर सकता है। आपको डब्लूएसडीएल में किसी भी सेवा अंत बिंदु की तलाश करनी चाहिए और एसएसएल (https: //) पर अपने ब्राउज़र में उन लोगों तक पहुंचने का प्रयास करना चाहिए। यदि आप नहीं कर सकते हैं तो एक सर्वर कॉन्फ़िगरेशन समस्या है। सर्वर पर SSL कॉन्फ़िगरेशन को सही करें और आपके डब्लूएसडीएल को काम करना चाहिए, या कम से कम आपके पास एक नया मुद्दा होगा।

+0

फ़ायरफ़ॉक्स समाप्ति बिंदु को: "। एसएसएल सहकर्मी अपने प्रमाण पत्र सत्यापित नहीं कर सकता (त्रुटि कोड: ssl_error_bad_cert_alert)" – Tommaso

+0

व्यवस्थापक का कहना है कि auth_cert.pem "प्रस्तुति प्रमाणपत्र" और रिश्तेदार निजी कुंजी मैं "कनेक्शन एन्क्रिप्ट करने के लिए उपयोग करना चाहिए auth_private_key.pem है " – Tommaso

6

Webservice administrator gave me WSDL, two certificates and a private key

यदि आप केवल सेवा का उपभोग करते हैं तो निजी कुंजी की आवश्यकता नहीं होती है। मुझे लगता है कि आप https के साथ 2-तरफा प्रमाणीकरण चाहते हैं। यदि यहां यह मामला है कि यह कैसे काम करता है:

सर्वर पर व्यवस्थापक को SSL सक्षम करने के लिए एक निजी कुंजी के साथ प्रमाण स्थापित करना चाहिए (कुंजी का उपयोग SSL हैंडशेक के दौरान किया जाता है)। इसकी सार्वजनिक कुंजी का उपयोग यह जांचने के लिए किया जाता है कि क्या प्रमाण वैध है और सेवा प्रमाणित करने के लिए, इसलिए ग्राहक पक्ष पर आपको किसी भी तरह से इसे जांचना होगा। यदि दोनों मशीनें विंडोज डोमेन में हैं तो यह आसान है (इसे डोमेन प्रमाणन प्राधिकरण का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है)। यदि नहीं, तो आपको क्लाइंट मशीन (विश्वसनीय रूट सीए स्टोरेज में) स्थापित करने के लिए मूल सर्वर प्रमाण पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले सभी कर्टों की आवश्यकता होती है।

दूसरा भाग सर्वर के लिए क्लाइंट प्रमाणीकरण है। आप ग्राहक प्रमाणपत्र (यह सार्वजनिक कुंजी है) निजी भंडारण के लिए स्थापित करने और इसका इस्तेमाल करने के WCF प्रॉक्सी: आप इस व्यवहार का उपयोग करने के endpoint

<behaviors> 
    <endpointBehaviors> 
     <behavior name="certSecureBehavior"> 
      <clientCredentials> 
       <clientCertificate findValue="client-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My"/> 
       <serviceCertificate> 
        <defaultCertificate findValue="server-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="TrustedPeople"/> 
       </serviceCertificate> 
      </clientCredentials> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

कॉन्फ़िगर।कुछ नोट:

  • ग्राहक-CN एक नाम ग्राहक प्रमाणपत्र के लिए (बहुत महत्वपूर्ण नहीं)
  • सर्वर-सीएन एक नाम (आमतौर पर सर्वर DNS नाम) सर्वर प्रमाणपत्र के लिए उत्पन्न होता है
  • उत्पन्न किया जाता है

यह बहुत जटिल विषय है और हमेशा अनुसंधान करने के लिए समय के बहुत आवश्यकता होती है। इस लेख http://blogs.msdn.com/b/imayak/archive/2008/09/12/wcf-2-way-ssl-security-using-certificates.aspx आशा इस मदद की जाँच करें।

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