2011-11-29 13 views
5

मैंने अपने कोड में javax.net.ssl.X509TrustManager लागू किया है, इसलिए मैं अपने स्वयं के हस्ताक्षरित प्रमाण को सत्यापित कर सकता हूं, जो मेरा सॉफ़्टवेयर एक्सेस करता है। हालांकि, मुझे अभी भी कुछ अन्य "मानक" वेबसाइट एसएसएल प्रमाणपत्रों को प्रमाणित करने की आवश्यकता है। मैं ऐसा करने के लिए CertPathValidator.validate() का उपयोग कर रहा हूं, लेकिन मुझे अभी एहसास हुआ है कि मुझे एक प्रमाण श्रृंखला पारित की जा रही है (maps.googleapis.com के लिए) में वास्तव में पूरी श्रृंखला नहीं होती है - इसमें पूरी श्रृंखला होती है लेकिन रूट सीए (इक्विफैक्स), जो फोन पर मौजूद है, लेकिन validate() अभी भी विफल रहता है क्योंकि (स्पष्ट रूप से) यह श्रृंखला में स्पष्ट रूप से नहीं है। मैं यहां क्या खो रहा हूं, ताकि सत्यापन सफल हो जाए? किसी भी इनपुट के लिए धन्यवाद।एंड्रॉइड मैनुअल X509 प्रमाणपत्र श्रृंखला सत्यापन

संपादित करें - प्रासंगिक कोड (अपवाद के साथ हटा दिया जाँच): अपनी खुद की TrustManager

CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
// chain is of type X509Certificate[] 
CertPath cp = cf.generateCertPath(Arrays.asList(chain)); 

CertPathValidator cpv = CertPathValidator.getInstance(CertPathValidator.getDefaultType()); 
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 

FileInputStream is = new FileInputStream("/system/etc/security/cacerts.bks"); 
ks.load(is, null); 

PKIXParameters params = new PKIXParameters(ks); 
CertPathValidatorResult cpvr = cpv.validate(cp, params); 
+0

कुछ और विवरण: मुझे कॉल से 'प्रमाण पत्र (वैधता') को 'प्रमाण पत्र() 'त्रुटि से प्राप्त करें, ** org.bouncycastle.jce.exception.ExtCertPathValidatorException: जारीकर्ता के लिए कोई सीआरएल नहीं मिला" OU = Equifax सुरक्षित प्रमाणपत्र प्राधिकरण , ओ = इक्विफैक्स, सी = यूएस "** – Conrad

उत्तर

2

को लागू आम तौर पर एक बुरा विचार है। बेहतर तरीका है कि आप अपने प्रमाणपत्रों को एक कीस्टोर में जोड़ दें, और इसे ट्रस्ट स्टोर के रूप में जोड़ें। इसे कैसे करें इसके उदाहरण के लिए this देखें।

आपको शायद अपने वैधकर्ता को डिफ़ॉल्ट ट्रस्ट स्टोर जोड़ने की आवश्यकता है। इसके अलावा, एंड्रॉइड डिफ़ॉल्ट रूप से निरस्तीकरण (सीआरएल) की जांच नहीं करता है, इसलिए यदि आपने इसे सक्षम किया है, तो आपको संबंधित सीआरएल मैन्युअल रूप से प्राप्त करने की आवश्यकता है। अपना कोड पोस्ट करें।

+0

लिंक के लिए धन्यवाद - मैं इसे देख लूंगा। – Conrad

+0

यह सही उत्तर दिखता है, लेकिन मैं तीसरे पक्ष के libs का उपयोग कर रहा हूं जो 'DefaultHttpClient'' को कॉल करते हैं और मैं उन्हें पुनः संयोजित नहीं करना चाहता, इसलिए मैं सिर्फ maps.googleapis.com पर अपनी कॉल को असुरक्षित कर दूंगा इस बिंदु। सूचक के लिए धन्यवाद। – Conrad

+0

@ निकोले, "अपने स्वयं के ट्रस्टमैनेजर को लागू करना आम तौर पर एक बुरा विचार है।" मैं सहमत हूं। लेकिन, हमें सीआरएल के साथ प्रमाण पत्र सत्यापित करने की आवश्यकता है। एंड्रॉइड यह नहीं है। हम इसे कैसे हल कर सकते हैं? –

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