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