2012-12-11 29 views
6

के लिए .NET कॉम्पैक्ट फ्रेमवर्क में X509 प्रमाणपत्र का उपयोग करना मैं विंडोज मोबाइल 6 में काम कर रहा हूं और अपाचे वेबसर्वर से बात करते समय क्लाइंट प्रमाणीकरण करना चाहता हूं। मैं अपने स्थानीय प्रमाणपत्र संग्रह में एक प्रमाण पत्र है और यह नहीं बल्कि सरल होना चाहिए:क्लाइंट प्रमाणीकरण HTTPRequest

X509Store myStore = new X509Store("MY", StoreLocation.CurrentUser); 
myStore.Open(OpenFlags.ReadOnly); 
X509Certificate2Collection certificates = myStore.Certificates; 
X509Certificate2 clientcertificate; 
foreach (X509Certificate 2certificate in certificates) { 
    clientcertificate = certificate; //omitted code to validate certificate 
} 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(webPage); 
req.AllowWriteStreamBuffering = true; 
req.AllowAutoRedirect = false; 
req.Method = "POST"; 
req.ContentType = "text/xml"; 
req.Accept = "text/xml"; 
req.ClientCertificates.Add(clientcertificate); 
Stream stream = req.GetRequestStream(); 
stream.Write(buffer, 0, buffer.Length); 
stream.Close(); 

इस कोड खंड जब तक मैं "req.ClientCertificates.Add (clientcertificate)" लाइन को हटाने के रूप में काम करता है।

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

क्या किसी को पता है कि यह कॉम्पैक्ट फ्रेमवर्क में संभव है या नहीं? यदि मैं क्लाइंट प्रमाणीकरण के लिए X509 प्रमाणपत्र प्रस्तुत नहीं कर सकता, तो यह सुनिश्चित करने के लिए कि मुझे प्रमाणीकरण उचित है (मुझे सीएपीआई या अन्य माइक्रोसॉफ्ट क्रिप्टोग्राफिक मॉड्यूल तक पहुंच होनी चाहिए)

धन्यवाद।

+0

[ServicePointManager.CertificatePolicy] (http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.certificatepolicy%28v=vs.90%29.aspx) पर एक नज़र डालें संपत्ति और [ICertificatePolicy] (http://msdn.microsoft.com/en-us/library/system.net.icertificatepolicy%28v=vs.90%29.aspx) इंटरफ़ेस। –

+0

आपके उत्तर के लिए धन्यवाद। मैंने इंटरमीडिएट सर्टिफिकेट्स को स्थापित किया है और साथ ही साथ सभी प्रमाण पत्रों, एक ही मुद्दे की अनुमति देने के लिए आईसीर्ट्रेड पॉलिसी को कोड जोड़ा है। –

उत्तर

1

अच्छी खबर: मैं इसे हल किया। यह नेट कॉम्पैक्ट फ्रेमवर्क के साथ नहीं करना है। 3.5 सीएफ में, HTTPWebRequest.ClientCertificates तब तक समर्थित है जब तक X509 प्रमाणपत्र का उपयोग किया जा सके।

एसएसएल हैंडशेक विफल होने का कारण सर्वर साइड सर्टिफिकेट के साथ ट्रस्ट समस्या के कारण था। हमारे सर्वर प्रमाण पत्र स्वयं हस्ताक्षरित थे और हमने प्रमाण पत्र का उपयोग किया जो गलत यूआरएल के लिए हस्ताक्षर किए गए थे, इसलिए आवेदन सही सर्वर प्रमाण पत्र पर भरोसा नहीं करेगा। परीक्षण उद्देश्यों के लिए, हमने एक ट्रस्ट ऑल सर्टिफिकेट पॉलिसी स्थापित की है, जिसे उत्पादन के लिए हटा दिया जाएगा।

sealed class AcceptAllCertificatePolicy : ICertificatePolicy 
{ 
    private const uint CERT_E_UNTRUSTEDROOT = 0x800B0109; 

    public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate 
    certificate, WebRequest request, int certificateProblem) 
    { 
     // Just accept. 
     return true; 
    } 
    /*public bool CheckValidationResult(ServicePoint sp, 
    X509Certificate cert, WebRequest req, int problem) 
    { 
     return true; 
    }*/ 
} 

सही HTTPWebRequest

System.Net.ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy(); 

और यह SSL/TLS सुरक्षित चैनल के साथ हमारे समस्या का हल करने से पहले संदर्भित।

+0

नोट: एक और चीज जो करने की आवश्यकता है: रूट प्रमाणपत्र स्थापित करें। मुझे एक ही त्रुटि मिली, लेकिन जब मैंने रूट और मध्यवर्ती प्रमाणपत्र स्थापित किए, तो इसका समाधान हो गया। –

1

यह हो सकता है कि आपका अपाचे सर्वर सुरक्षित कनेक्शन का समर्थन न करे।

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

लेकिन, एसएसएल क्षमताओं को पाने के लिए, मुझे $ 50/माह की तरह खोलना होगा। तो, मैं अपनी साइटों पर उन लोगों का परीक्षण नहीं कर सकता।

परीक्षण करने के लिए

: अपाचे सर्वर SSL का समर्थन करता है, तो आप एसएसएल बराबर के साथ यूआरएल को बदलने के लिए सक्षम होना चाहिए: http://www.stackoverflow.comhttps://www.stackoverflow.com साथ

+0

दुर्भाग्य से, हम जानते हैं कि अपाचे सर्वर सुरक्षित कनेक्शन का समर्थन करता है। यह HTTPS: // क्लाइंट प्रमाणपत्रों के बिना और ब्राउज़र के साथ भी ठीक काम करता है। यह तभी होता है जब मैं कॉम्पैक्ट फ्रेमवर्क में वेब अनुरोध में क्लाइंट प्रमाणपत्र जोड़ता हूं जो यह काम करना बंद कर देता है। –

+0

अरे, बस मौके से, एक और लड़के ने आज यहां अपने एक्स 50 9 कोड पोस्ट किए: [1385860 9] (http://stackoverflow.com/q/13858609/153923) आप दोनों में से कुछ सहयोग कर सकते हैं। सिर्फ एक विचार। – jp2code

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

  • कोई संबंधित समस्या नहीं^_^