2010-03-25 15 views
15

के दौरान एसएसएल क्लाइंट प्रमाणपत्र की आवश्यकता है मैं एसएसएल क्लाइंट प्रमाणपत्रों की आवश्यकता के लिए आईआईएस वेबसाइट को कॉन्फ़िगर करने की कोशिश कर रहा हूं। यह वेबसाइट आईआईएस 6 और 7 दोनों में स्थापित है, हालांकि मुझे 7 के लिए काम करने में अधिक दिलचस्पी है। मैंने आईआईएस में क्लाइंट सर्टिफिकेट प्रॉपर्टी की आवश्यकता निर्धारित की है और वेब ब्राउज़र के माध्यम से साइट तक पहुंचने पर यह ठीक काम करता है, लेकिन जावा- आधारित क्लाइंट को इसे एक्सेस करने में परेशानी हो रही है।आईआईएस को शुरुआती हैंडशेक

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

क्या किसी ने आईआईएस में इस समस्या का सामना किया है?

+0

आप अच्छी तरह से serverfault.com – Jeff

उत्तर

6

इस मेटाबेस सेटिंग को ढूंढने में मुझे कुछ समय लगा। हमें नए प्रमाण पत्र पुस्तकालयों का उपयोग करके हमारे ग्राहक के साथ यही समस्या हो रही थी। चूंकि एसएसएल रीनेगोसिएशन के आस-पास एमआईटीएम हमले की खोज के बाद से, सर्किलों के बहुत सारे जवाब में पुनर्विचार अनुरोधों पर लटका हुआ है।

\ inetpub \ adminscripts से निम्न cmd चला रहा है IIS को हमेशा क्लाइंट प्रमाणपत्र का अनुरोध करने के लिए मजबूर करेगा।

आईआईएस 6 के लिए: cscript \ W3SVC \ siteID \ SSLAlwaysNegoClientCert सच

(तो डिफ़ॉल्ट वेबसाइट के लिए, cscript adsutil.vbs सेट \ W3SVC \ 1 \ SSLAlwaysNegoClientCert यह सच है)

रखें सेट adsutil.vbs ध्यान रखें कि कुछ क्लाइंट क्लाइंट प्रमाणपत्रों के लिए इंटरनेट एक्सप्लोरर प्रॉम्प्ट जब यह प्राप्त होता है कि उस पैकेट को क्लाइंट प्रमाण पत्र की आवश्यकता होती है या नहीं।

आईआईएस 7 के लिए:

सहेजें नामक एक फ़ाइल में निम्न पाठ "Enable_SSL_Renegotiate_Workaround.js"

var vdirObj=GetObject("IIS://localhost/W3svc/1"); 
// replace 1 on this line with the number of the web site you wish to configure 

WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert); 
vdirObj.Put("SSLAlwaysNegoClientCert", true); 
vdirObj.SetInfo(); 
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert); 

भागो एक ऊंचा/व्यवस्थापक कमांड प्रॉम्प्ट से निम्न आदेश:

cscript। exe enable_ssl_renegotiate_workaround.js

(977377 के लिए केबी आलेख से जैक)

+1

पर इस सवाल का प्रयास कर सकते हैं, जिस तरह से मैं इसे टाइप किया तरह फ्लॉप ... सामान्य cscript adsutil.vbs \ W3SVC \ siteID \ SSLAlwaysNegoClientCert सच डिफ़ॉल्ट वेबसाइट के लिए (उदाहरण) cscript adsutil.vbs \ w3svc \ 1 \ SSLAlwaysNegoClientCert True –

+0

क्या यह आईआईएस 7 में काम करता है? मुझे एसएसएलएलवेजएगो क्लाइंट कर्ट ढूंढना याद है, लेकिन मैं इसे आईआईएस 7 में सेट करने के तरीके को समझने में असमर्थ था। मुझे हाल ही में यह स्पष्टीकरण मिला: http://forums.iis.net/t/1158990.aspx। अंत में, हमने अपने ग्राहक प्रमाणीकरण के लिए एक अलग मार्ग जाने का फैसला किया, इसलिए मेरी रुचि सिर्फ जिज्ञासा से है। आपके उत्तर के लिए धन्यवाद। – nslowes

+0

हां, हमारे सेटअप दस्तावेज़ पहले से ही आईआईएस 6 संगतता घटकों की सिफारिश करता है। तो, मैं आसान हो गया। हालांकि आपके प्रश्न ने मुझे सोमवार को एक बम चबाने से बचाया होगा। मैंने जांच नहीं की कि क्या adsutil आईआईएस 6 लड़ाकू घटकों का हिस्सा था। मेरे पास अब इसके बारे में चिंता करने के लिए बहुत अधिक लोग हैं। –

8

यहाँ मैं यह कैसे किया, आईआईएस 7.5 पर है:

  1. एक व्यवस्थापक कमांड प्रॉम्प्ट में निम्नलिखित चलाएँ: netsh http show sslcert
  2. सहेजें एक पाठ फ़ाइल में उत्पादन।कुछ इस तरह दिखेगा:

    IP:port     : 0.0.0.0:443 
    Certificate Hash  : [a hash value] 
    Application ID   : {[a GUID]} 
    Certificate Store Name : MY 
    Verify Client Certificate Revocation : Enabled 
    Verify Revocation Using Cached Client Certificate Only : Disabled 
    Usage Check : Enabled 
    Revocation Freshness Time : 0 
    URL Retrieval Timeout : 0 
    Ctl Identifier   : (null) 
    Ctl Store Name   : (null) 
    DS Mapper Usage : Disabled 
    Negotiate Client Certificate : Disabled 
    
  3. कि जानकारी का उपयोग कर एक बैच फ़ाइल बनाएँ:

    netsh http show sslcert 
    netsh http delete sslcert ipport=0.0.0.0:443 
    netsh http add sslcert ipport=0.0.0.0:443 certhash=[your cert hash from above] appid={[your GUID from above]} certstorename=MY verifyclientcertrevocation=enable VerifyRevocationWithCachedClientCertOnly=disable UsageCheck=Enable clientcertnegotiation=enable 
    netsh http show sslcert 
    

    (हाँ, आप हटाना और फिर से जोड़ना है, तो आप सिर्फ clientcertnegotiation in- परिवर्तन नहीं कर सकते जगह है। यही कारण है कि हैश और GUID को सहेजना महत्वपूर्ण है, इसलिए यह जानता है कि फिर से जोड़ना क्या है।)

  4. उस बैच फ़ाइल को चलाएं, किसी भी त्रुटि के लिए जांचें।

ध्यान रखें कि इस सेटिंग को लागू किया जाता है प्रति-प्रमाण पत्र, नहीं प्रति-सर्वर। इसलिए यदि आप एकाधिक कर्ट का उपयोग करते हैं, या अपने प्रमाण को बदलते/अपडेट करते हैं, तो आपको इसे फिर से करना होगा।

+0

उन नेटशेस आदेशों में से प्रत्येक के बीच नई लाइनें होनी चाहिए। मुझे याद नहीं है कि मुझे यह कहां से मिला - केबी? MSDN? – CrazyPyro

+0

दूसरा, यह विंडोज 2008 आर 2 पर आईआईएस 7.5 में काम करता है। –

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