2009-05-22 13 views
16

मेरे पास एक .NET एप्लिकेशन है जिसे मैं एक एसएसएल SOAP वेब सेवा कॉल करने के लिए क्लाइंट के रूप में उपयोग करना चाहता हूं। मुझे foo.pfx नामक वैध क्लाइंट प्रमाणपत्र के साथ आपूर्ति की गई है। प्रमाण पत्र पर एक पासवर्ड है।X509Certificate.CreateFromCertFile - निर्दिष्ट नेटवर्क पासवर्ड सही नहीं है

मैं निम्नलिखित स्थान पर प्रमाण पत्र का पता लगा लेने: C:\certs\foo.pfx

वेब सेवा को कॉल करने के लिए, मैं क्लाइंट प्रमाणपत्र संलग्न करने के लिए की जरूरत है।

public X509Certificate GetCertificateFromDisk(){ 
    try{    

     string certPath = ConfigurationManager.AppSettings["MyCertPath"].ToString(); 
     //this evaluates to "c:\\certs\\foo.pfx". So far so good. 

     X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath); 
     // exception is raised here! "The specified network password is not correct" 

     return cert; 

    } 
    catch (Exception ex){  
     throw; 
    } 
} 

ऐसा लगता है अपवाद की तरह .NET अनुप्रयोग डिस्क को पढ़ने की कोशिश कर रहा है चारों ओर: यहाँ कोड है। विधि CreateFromCertFile एक स्थिर विधि है जिसे X509 प्रमाणपत्र का एक नया उदाहरण बनाना चाहिए। विधि ओवरराइड नहीं है, और केवल एक तर्क है: पथ।

जब मैं अपवाद का निरीक्षण किया, मैं इस लगता है:

_COMPlusExceptionCode = -532459699 
Source=mscorlib 

प्रश्न: किसी को पता है क्या अपवाद के कारण "निर्दिष्ट नेटवर्क पासवर्ड सही नहीं है"?

उत्तर

25

यह पता चला कि मैं .cer फ़ाइल के बजाय .pfx से प्रमाण पत्र बनाने का प्रयास कर रहा था।

सबक सीखा ...

  • .cer फ़ाइलें बाइनरी रूप में एक X.509 प्रमाणपत्र कर रहे हैं। वे DER encoded हैं।
  • .pfx फ़ाइलें कंटेनर फ़ाइलें हैं। डीईआर एन्कोडेड भी। उनमें न केवल प्रमाण पत्र होते हैं, बल्कि एन्क्रिप्टेड रूप में निजी कुंजी भी होती है।
+2

आपकी जानकारी ने मुझे बचाया – user217648

+0

@ p.campell क्या स्थानीय निर्देशिका से .pfx प्रमाणपत्र अपलोड करना और उस प्रमाणपत्र का थंबप्रिंट प्राप्त करना संभव है? – drgmak

6

आपकी स्थिति के आधार पर आपको .cer फ़ाइल निर्यात करने से पहले ट्रस्ट स्तर प्राप्त करने के लिए पहले सर्वर पर प्रमाण पत्र स्थापित करने की आवश्यकता है।

मुझे इसे इसी तरह के प्रोजेक्ट के लिए करना था और यहां यह नोट किया गया कि यह कैसे पूरा हुआ।

सर्वर पर स्थापित प्रमाणपत्र के निर्यात के साथ Foo.cer को बदलें। (pfx फ़ाइल से प्रमाणपत्र स्थापित करें और फिर एक cer फ़ाइल को निर्यात।)

  • कमान IIS6 प्रमाणपत्र कुंजी को IIS_WPG समूह उपयोग की अनुमति के लिए। winhttpcertcfg इंस्टॉल करने की आवश्यकता है (आप अपनी खुद की प्रतिलिपि लेने के लिए नीचे दिए गए लिंक का अनुसरण कर सकते हैं)।

    सी: \ प्रोग्राम फ़ाइलें \ विंडोज संसाधन किट \ उपकरण> winhttpcertcfg -i (पीएफएक्स फ़ाइल के लिए पथ, उदाहरण के लिए ई: \ Certs \ Foo।pfx) -c LOCAL_MACHINE \ मेरे -एक IIS_WPG -p (PFX फ़ाइल के लिए पासवर्ड)

  • बाहर spits और मुख्य जानकारी और अनुदान विशेषाधिकार

    खाते के लिए निजी कुंजी ऐक्सेस देने से:

    (SERVERNAME)\IIS_WPG 
    

WinHttpCertCfg.msihere डाउनलोड करें जो exe इंस्टॉल करता है।

प्रमाण कॉन्फ़िगरेशन का उपयोग करने के तरीके के बारे में अधिक जानकारी here मिल सकती है।

फिर यह वापस आता है कि आप अपना प्रमाण पुश कैसे कर रहे हैं।

//Cert Challenge URL 
Uri requestURI = new Uri("https://someurl"); 

//Create the Request Object 
HttpWebRequest pageRequest = (HttpWebRequest)WebRequest.Create(requestURI); 

//After installing the cert on the server export a client cert to the working directory as Foo.cer 
string certFile = MapPath("Foo.cer"); 
X509Certificate cert = X509Certificate.CreateFromCertFile(certFile); 


//Set the Request Object parameters 
pageRequest.ContentType = "application/x-www-form-urlencoded"; 
pageRequest.Method = "POST"; 
pageRequest.AllowWriteStreamBuffering = false; 
pageRequest.AllowAutoRedirect = false; 
pageRequest.ClientCertificates.Add(cert); 

यह कैसे मैं प्रमाणपत्र पारित कर दिया लेकिन यकीन नहीं है कि आप अपने प्रमाणपत्र के साथ क्या करना तो यह आप के लिए एक ही नहीं हो सकता है की आवश्यकता होगी, कर रहे हैं कि वास्तव में क्या।

5

'निर्दिष्ट नेटवर्क पासवर्ड सही नहीं है' त्रुटि संदेश तब भी लौटाया जाता है जब आप ओएस स्टोर में से किसी एक में आयात करने का प्रयास कर रहे हैं, उस स्टोर में पहले से मौजूद है।

6

आपको X509Certificate2() के बजाय X509KeyStorageFlags.MachineKeySet के पैरामीटर के साथ उपयोगकर्ता को उपयोगकर्ता की आवश्यकता हो सकती है। यह हमारे पास एक समान मुद्दा तय किया गया था। http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production/

का हवाला देते हुए: मूल वेबसाइट है कि इस सुझाव के लिए ऋण

कारण

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

समाधान

एक बात आप की कोशिश कर सकते में खाता लॉगिन करने के बाद अपने व्यक्तिगत दुकान में एक प्रमाण पत्र को आयात करके एक उपयोगकर्ता कुंजी संग्रह पैदा कर रही है (और तो इसे फिर से निकालने के लिए)। var certificate = new X509Certificate2(fileName, password, X509KeyStorageFlags.MachineKeySet);

: - स्थानीय कंप्यूटर में संग्रहीत (होना चाहिए) कर रहे हैं एक झंडा निजी कुंजी का संकेत - X509KeyStorageFlags.MachineKeySet, इस तरह

एक अन्य समाधान निर्माता लिए एक अतिरिक्त पैरामीटर पारित करने के लिए है बिना पासवर्ड वाले पीएफएक्स के लिए, पासवर्ड को string.Empty के रूप में निर्दिष्ट किया जा सकता है।

भी https://stackoverflow.com/a/8291956/130352

2

देखें मेरे मामले में मैं निजी आवेदन मोड में चलाने के लिए कोशिश कर रहा था और मैं एक ही त्रुटि मिली।

निर्दिष्ट नेटवर्क पासवर्ड सही

PrivateAuthenticator निर्माता (Xero.Api.Example.Applications.Private में) प्रमाण पत्र यह सोचते हैं कि कोई पासवर्ड प्रमाण पत्र के निर्माण के दौरान परिभाषित किया गया है आयात करने के लिए कोशिश कर रहा था नहीं है।

_certificate = new X509Certificate2(); 
_certificate.Import(certificatePath); 

तो मैं एक अधिभार विधि है जो पासवर्ड का उपयोग करता,

_certificate.Import(certificatePath, "mypasswordusedtocreatethecertificate", X509KeyStorageFlags.MachineKeySet); 
0

आप X509KeyStorageFlags.MachineKeySet की जरूरत हो सकती उपयोग करने के लिए आयात बदल दिया है।

मैं वेब नौकरी से प्रमाणपत्र का उपयोग कर रहा हूं।

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