2012-11-16 15 views
9

मेरा सी # नेट एप्लिकेशन एक HTTPS webservice का उपयोग कर रहा है। चूंकि cerificate अब समाप्त होने वाला है, मैं इसे एक नए से अपडेट करने की कोशिश कर रहा हूं जो मुझे दिया गया है (a .jks फ़ाइल जिसे मैंने javasdks 'keytool का उपयोग करके .p12 में परिवर्तित कर दिया है)। मैंने सोचा कि यह आसान होगा, क्योंकि मुझे पता है कि यह कैसे करना है, लेकिन यह सिर्फ सहयोग नहीं करेगा।एसएसएल वेबसाइट: एसएसएल/टीएलएस सुरक्षित चैनल नहीं बना सका

मैं अब तक क्या किया है:

  • आयातित प्रमाण पत्र CURRENT_USER \ व्यक्तिगत करने के लिए
  • आयातित प्रमाण पत्र LOCAL_MACHINE करने के लिए \ व्यक्तिगत
  • सही उपयोगकर्ता (apppoolidentity) प्रमाणपत्र के निजी कुंजी के लिए उपयोग के माध्यम से देखते हुए winhttpcertcfg उपकरण .. नीचे प्रमाणपत्र के लिए अधिकार की एक सूची है।
  • findprivatekey टूल का उपयोग करके, मैंने वास्तविक कुंजी फ़ाइल भी दर्ज की है, और ऐपपुलिडिटी तक पहुंच प्रदान की है। (हताशा में)।

    C: \ Program Files (x86) \ Windows संसाधन किट \ उपकरण> winhttpcertcfg -l -c LOCAL_MACHINE \ मेरे -s "9000 - Blabla" Microsoft (R) WinHTTP प्रमाणपत्र कॉन्फ़िगरेशन टूल कॉपीराइट (सी) Microsoft Corporation 2001

    मिलान प्रमाण पत्र: सीएन = 9000 - Blabla सी = नहीं एल = "c/o Blabla के रूप में, Blablaaddress" OU = 957,839,827 OID.1.2.240.111111.1.9.8 = 12345678 OID। 1.2.240.111111.1.9.2 = ब्लैब्ला टेस्ट ओ = ब्लैब्ला एएस ओयू = बहु-आवंटित

    अतिरिक्त खाते और निजी कुंजी के उपयोग के साथ समूह में शामिल हैं: BUILTIN \ Administrators NT AUTHORITY \ SYSTEM IIS AppPool \ ASP.NET v4.0 BUILTIN \ उपयोगकर्ता NT AUTHORITY \ NETWORK सेवा DIGITROLLDMZ \ IIS_WPG

यूआरएल मैं दिखता है कुछ इस तरह तक पहुँचने हूँ:

https://test.blabla.com/blabla-5.0/services/Blabla?wsdl 

... अगर मैं सर्वर वेब ब्राउज़र से उस तक पहुंच, मैं प्रमाणपत्र का चयन करने के लिए मिलता है, मैं नया एक का चयन करें, और यह कहते हैं कि यह क्रम में ठीक है, हरे और एसएसएल है और सभी है, लेकिन अपने आवेदन कोड, कि इस तरह दिखता है:

:

public static blabla.service.NettforhandlerService getNettforhandlerService(string applicationPath) 
    { 
    blabla.service.NettforhandlerService service = new blabla.service.NettforhandlerService(); 
    if (System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"] != null && System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"].Length > 0) 
    { 
     string serviceurl = service.Url; 
     X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
     store.Open(OpenFlags.ReadOnly); 
     X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySerialNumber, System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"], true); 

     ServicePointManager.Expect100Continue = true; 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
     ServicePointManager.CertificatePolicy = new TrustHBSCertificatePolicy(); 

     service.ClientCertificates.Add(col[0]); 

    } 
    return service; 
    } 

केवल इस त्रुटि आउटपुट

The request was aborted: Could not create SSL/TLS secure channel. 

... मैं web.config करने के लिए कुछ का पता लगाने/डिबग जानकारी जोड़ दिया है, और मैं क्या त्रुटि से पता चला यह था:

[Public Key] 
    Algorithm: RSA 
    Length: 2048 
    Key Blob: 30 82 01 0a 02 82 01 01 00 8e a6 72 c2 e1 67 16 e2 be be c3 30 89 8d bb 57 0b 48 f8 1d 09 b1 e3 26 42 c9 45 9e 02 b2 43 49 16 81 94 1b 18 d6 6d ef .... 
System.Net Information: 0 : [15624] SecureChannel#32061089 - Certificate is of type X509Certificate2 and contains the private key. 
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net.Sockets Verbose: 0 : [15624] Socket#38259205::Dispose() 
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071:: - The request was aborted: Could not create SSL/TLS secure channel. 
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071::GetResponse - The request was aborted: Could not create SSL/TLS secure channel. 
System.Net Verbose: 0 : [15624] 

मैं इस लग रहा है सही उपयोगकर्ता/पहचान की तरह hasn पता एसी दिया गया है सर्टिफिकेट के लिए सेस (winhttpcertcfg से), लेकिन मुझे पूरा यकीन है कि यह है, इसलिए मैं यहां नुकसान पहुंचा रहा हूं,

उम्मीद है कि कुछ गंभीर https-प्रमाणपत्र/वेब-सेवा -स्किल वाले व्यक्ति मेरी मदद कर सकते हैं यहां बाहर :-)

धन्यवाद।

सादर, Jørgen ई

edit1: बदल अधिक सटीक कुछ करने के लिए शीर्षक। EDIT2: नई जानकारी:

In EventViewer/Windows Logs/Security there is an event "Audit Failure" connected to this: 

Cryptographic operation. 

Subject: 
    Security ID:  IIS APPPOOL\ASP.NET v4.0 
    Account Name:  ASP.NET v4.0 
    Account Domain:  IIS APPPOOL 
    Logon ID:  0x32498 

Cryptographic Parameters: 
    Provider Name: Microsoft Software Key Storage Provider 
    Algorithm Name: Not Available. 
    Key Name: {00E1A3F5-7400-41CA-8290-02983473AEAF} 
    Key Type: Machine key. 

Cryptographic Operation: 
    Operation: Open Key. 
    Return Code: 0x80090010 

उत्तर

3

समस्या हल, लगता है एक मध्यवर्ती प्रमाणन याद आ रही थी, एमएमसी में मध्यवर्ती प्रमाण पत्र में यह आयातित है, और सभी अच्छा :-)

12

ज्यादा लॉग से निकाला जा सकता है, लेकिन ...

गूगल फू निम्न परिणाम पैदावार: 0x80090010 सबसे अधिक संभावना एक प्रमाण पत्र का उपयोग कर सकते त्रुटि है।

कि से, संभावना मैं निष्कर्ष है आप मेल नहीं खाता निजी कुंजी के लिए अनुमतियों को निर्धारित करने की आवश्यकता के उच्च स्तर के साथ - ताकि आईआईएस पहुँच सकते हैं। देखें: http://www.dotnetnoob.com/2011/01/how-to-give-iis-access-to-private-keys.html

एक और विकल्प के साथ इसी तरह के प्रश्न: The request was aborted: Could not create SSL/TLS secure channel

+3

हाय था, C: \ ProgramData \ Microsoft \ क्रिप्टो \ आरएसए \ MachineKeys ... फ़ाइल नाम है a23e3996925c33fec814f8ce35e4b1d9_57324829-0d1c-4ae4-ae60-1e2849f7749a और धन्यवाद :-) जवाब देने के लिए .. Ive अब इस फ़ोल्डर में एक फ़ाइल स्थित ... यदि मैं इस फ़ाइल में एप्लिकेशनपूलिडेंसी के लिए रीड एक्सेस जोड़ता हूं, तो यह काम करता है !! .. लेकिन मैं यह पहचानने में असमर्थ हूं कि यह कौन सा प्रमाण पत्र है, ताकि मैं उचित माध्यमों (winhttpcertcfg) के माध्यम से पहुंच जोड़ सकूं :-(.. कोई भी यह कैसे पहचान सकता है? या शायद यह एक्सेस मैन्युअल रूप से पर्याप्त होगा ? –

+1

आप एक उपकरण माइक्रोसॉफ्ट, FindPrivateKey.exe द्वारा, (यदि आप PFX है) का उपयोग कर सकते हैं। या सिर्फ अपने प्रमुख को हटाने के नीचे मौजूद फ़ाइलों की सूची लिखते हैं, और फिर से आयात प्रमाणपत्र/कुंजी, बनाए गए नए फ़ाइल टिप्पण। रेफरी: http://msdn.microsoft.com/ru-ru/library/ms732026.aspx (FindPrivateKey) – DarkWanderer

+0

FindPrivateKey और तकनीक आपके द्वारा निर्दिष्ट मैं क्या हासिल करना :-) मैं machinekeys के फ़ाइल नाम जानना चाहता हूँ की विपरीत है -file, और, पता है कि प्रमाण पत्र इस फ़ाइल से जुड़ा हुआ है चाहता हूँ कारण यह प्रमाण पत्र है कि मैं उपयोग कर रहा हूँ, मैं प्रमाण पत्र मैं findprivatekey साथ उपयोग कर रहा हूँ की पहचान की है नहीं है। –

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