2010-05-08 23 views
25

मेरे पास एक स्वयं हस्ताक्षरित प्रमाणपत्र का उपयोग करके आईआईएस 7 में चल रही डब्ल्यूसीएफ वेब सेवा है (यह सुनिश्चित करने के लिए अवधारणा का सबूत है कि यह वह मार्ग है जिसे मैं जाना चाहता हूं)। एसएसएल का उपयोग करना आवश्यक है।क्या डब्ल्यूसीएफ परीक्षण क्लाइंट को स्व-हस्ताक्षरित प्रमाणपत्र स्वीकार करने के लिए मजबूर करना संभव है?

क्या गैर-स्व-हस्ताक्षरित प्रमाणपत्र की आवश्यकता के बिना इस सेवा को डीबग करने के लिए डब्ल्यूसीएफ टेस्ट क्लाइंट का उपयोग करना संभव है?

जब मैं मैं इस त्रुटि मिलती है कोशिश:

Error: Cannot obtain Metadata from https:///Service1.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: https:///Service1.svc Metadata contains a reference that cannot be resolved: 'https:///Service1.svc'. Could not establish trust relationship for the SSL/TLS secure channel with authority ''. The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.HTTP GET Error URI: https:///Service1.svc There was an error downloading 'https:///Service1.svc'. The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.

संपादित करें: यह सवाल एक वेब सेवा एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करते हुए पहले से ही एसएसएल के माध्यम से सुरक्षित परीक्षण करने के लिए WCF टेस्ट ग्राहक उपयोग के बारे में विशेष रूप से है। सर्वर पहले से ही प्रदान किए गए किसी प्रमाण पत्र को स्वीकार करने के लिए स्थापित है, यह डब्ल्यूसीएफ टेस्ट क्लाइंट है जिसके लिए मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है।

उत्तर

-4

आप प्रमाण पत्र को सत्यापित करने के लिए अपनी विधि की आपूर्ति कर सकते हैं।

ServicePointManager.ServerCertificateValidationCallback += 
      new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck); 

कॉल बैक:

इस प्रयास करें

bool EasyCertCheck(object sender, X509Certificate cert, 
     X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
} 
+0

मुझे इस कोड को डब्ल्यूसीएफ टेस्ट क्लाइंट (कोड जो मैं नियंत्रित नहीं करता) में जोड़ने का कोई तरीका नहीं देखता हूं। मैंने पहले ही इस कॉल को अपने कोड (सर्वर साइड) में जोड़ा है। –

+0

बेशक, यह एक सही तरीका है यदि आप किसी अन्य सी # डब्ल्यूसीएफ क्लाइंट को एक स्व-हस्ताक्षरित सुरक्षा प्रमाणपत्र स्वीकार करने के लिए मजबूर करने की कोशिश कर रहे हैं। – stephen

3

आप ऐसा करने के लिए यदि आप WCFStorm Lite Edition साथ WCF टेस्ट क्लाइंट की जगह सक्षम होना चाहिए। यह मुफ़्त है और एमएस के टेस्ट क्लाइंट की तुलना में काफी अधिक लचीला है ... उदाहरण के लिए, यदि आप उपयोगकर्ता नाम प्रमाणीकरण कर रहे हैं तो यह आपको उपयोगकर्ता नाम & पासवर्ड निर्दिष्ट करने देगा।

+4

यदि आप मेरे जैसे हैं, और सॉफ्टवेयर डाउनलोड करना पसंद नहीं है जिसे आपने कभी नहीं सुना है, तो यहां WFCStorm की विजुअल स्टूडियो पत्रिका समीक्षा है। http://visualstudiomagazine.com/articles/2012/10/29/free-tool-wcfstorm.aspx –

3

this question से उत्तर मेरे मामले में मदद मिली। प्रमाण पत्र के रूप में सटीक मशीन नाम का उपयोग करना सुनिश्चित करें। परीक्षा के लिए machine/service.svc काम नहीं कर सकता है, जबकि machine.domain/service.svc - काम करता है।

+0

मेरा दूसरा तरीका था (जैसे मशीन में .डोमेन विफल हुआ, मशीन ने अभी काम किया)। धन्यवाद! विस्तृत जानकारी के लिए – johnofcross

12

आप विकास क्षेत्र में एक गैर-हस्ताक्षरित प्रमाणपत्र बना सकते हैं और फिर एसएसएल लागू करने के लिए आईआईएस में इस प्रमाणपत्र का उपयोग कर सकते हैं। कदम हैं:

  1. स्व-हस्ताक्षरित प्रमाणपत्र

    makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky signature 
        -ss CA -sr CurrentUser 
        -cy authority 
        -sv CA.pvk CA.cer
  2. एसएसएल के लिए एक गैर स्व-हस्ताक्षरित प्रमाणपत्र जो इस रूट प्रमाणपत्र द्वारा हस्ताक्षरित बनाएं और फिर उस

    से pfx-फ़ाइल बनाने बनाएं
    makecert -pe -n "CN=servername" -a sha1 -sky exchange 
        -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk 
        -sp "Microsoft RSA SChannel Cryptographic Provider" 
        -sy 12 -sv server.pvk server.cer 
    
    pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

अब आपको आईआईएस में server.pfx आयात करने और वेब सेट करने की आवश्यकता है इस प्रमाणपत्र का उपयोग करने के लिए बाध्यकारी और Local Computer \ Trusted Root Certification Authorities दोनों सर्वर और क्लाइंट में स्टोर करके यह डब्ल्यूसीएफ क्लाइंट किसी भी समस्या के बिना एचटीटीपीएस के माध्यम से सेवा के साथ काम करेगा।

+0

+1 – bugnuker

+3

आप सुंदरता! एक और चाल यह है कि आपको एक अवैध पासवर्ड त्रुटि मिल सकती है जिसे आप अंतिम पंक्ति पर कमांडलाइन पर पासवर्ड पास करके हल कर सकते हैं: pvk2pfx -pvk server.pvk -pi "yourpw" -spc server.cer -pfx server.pfx -po "yourpw" –

+0

मुझे सर्वर पर पीएफएक्स जोड़ते समय गलत पासवर्ड के बारे में त्रुटि मिली, लेकिन मैंने बस पासवर्ड में टाइपिंग छोड़ दी और सब ठीक लग रहा था। –

1

आपके प्रश्न का उत्तर करने के लिए ... इस तरीके से एक स्व-हस्ताक्षरित प्रमाणपत्र स्वीकार करने के लिए अपने WCF परीक्षण ग्राहक के लिए मजबूर है ...

 using (ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client()) 
     { 
      System.Net.Security.RemoteCertificateValidationCallback callBack = (sender, certificate, chain, sslPolicyErrors) => true; 
      ServicePointManager.ServerCertificateValidationCallback += callBack; 

      Console.WriteLine(proxy.GetData(35)); 

      ServicePointManager.ServerCertificateValidationCallback -= callBack; 
     } 
+0

मुझे लगता है कि उसका मतलब _WCFTestClient.exe_ था। जो भी हो, आपके उत्तर ने मुझे मेरे डब्ल्यूसीएफ परीक्षण क्लाइंट ** परियोजना ** के साथ मदद की। –

0

हाँ, यह संभव है।

बस सेवा से उत्पन्न जेएसएसएल डाउनलोड करें (https://localhost/Service1.svc?singleWsdl) और डब्ल्यूसीएफ टेस्ट क्लाइंट में सेवा जोड़ने के दौरान इस फ़ाइल का मार्ग प्रदान करें।