Azure

2013-02-11 20 views
6

में क्लाइंट प्रमाणपत्र प्रमाणीकरण और सीए प्रमाण पत्र मुझे क्लाइंट प्रमाणपत्रों का उपयोग करके Azure क्लाउड सेवा वेब रोल पर अनुरोध प्रमाणित करने की आवश्यकता है। प्रमाणन प्राधिकरण (सीए) रूट प्रमाणपत्र को सही विश्वसनीय स्टोर में कैसे रखा जाए?Azure

मैं AuthRoot स्टोर नाम के साथ सेवा परिभाषा फ़ाइल में परिभाषित प्रबंधन पोर्टल में इसे अपलोड करने की कोशिश की और उसके बाद:

<Certificate name="RootCA" storeLocation="LocalMachine" storeName="AuthRoot" /> 

क्या वास्तव में अजीब बात है कि यह काम करता है ... लेकिन केवल कभी कभी। यह एक उदाहरण रीबूट के बाद काम कर सकता है, लेकिन सेवा अद्यतन या किसी अन्य इंस्टेंस रीबूट के बाद काम नहीं कर सकता है। यह Azure में एक बग की तरह लगता है।

जब मैं कहता हूं "काम करता है" मेरा मतलब है कि सर्वर सफलतापूर्वक क्लाइंट प्रमाणपत्र स्वीकार करता है और अनुरोध को संसाधित करता है। जब मैं कहता हूं "काम नहीं करता" मेरा मतलब है कि सर्वर सर्टिफिकेट चेक के बाद कनेक्शन पर बातचीत नहीं करता है और "अनुरोध निरस्त किया गया था: एसएसएल/टीएलएस सुरक्षित चैनल नहीं बना सका।" एक ग्राहक पक्ष पर अपवाद फेंक दिया जाता है।

यह कैसे काम कर रहा है स्थिर?

युपीडी:

(स्रोत Schannel है) मिले में सिस्टम Windows ईवेंट लॉग यह रिकॉर्ड:

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

उत्तर

6

सटीक समस्या यहां वर्णित है: http://support.microsoft.com/kb/2801679

दिसंबर 2012 के बाद विंडोज अपडेट बहुत सारे प्रमाणपत्र AuthRoot स्टोर में जोड़े गए थे। तो हमें समस्या को हल करने के लिए उन्हें हटाना होगा।

यह करने के लिए मैं उपयोग PowerShell स्टार्टअप कार्य:

PowerShell -ExecutionPolicy Unrestricted .\Startup.ps1 
exit /b %errorlevel%  

और में ServiceDefinition.csdef:

Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\Certificates | Where-Object {$_.Name -notlike "*\<YOUR_CERTIFICATE_THUMBPRINT>"} | Remove-Item 

सीएमडी स्टार्टअप कार्य से चलाने के लिए

<WebRole name="Web"> 
    <Startup> 
    <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" /> 
    </Startup> 
    <!-- ... -> 
</WebRole>