नहीं मिला मैं जानता हूँ कि इस विषय में कई स्थानों पर चर्चा की है, लेकिन उसके बाद मैं लगभग सभी उनमें से माध्यम से चला गया, मैं अपनी पहली StackOverflow सवाल बनाने का फैसला किया है ...एंड्रॉयड स्वयं हस्ताक्षरित प्रमाणपत्र: प्रमाणीकरण पथ के लिए ट्रस्ट लंगर
मैं एक सुरक्षित वेब सेवा (https) कि किसी प्रमाणपत्र का उपयोग पहुंच को प्रतिबंधित करने से कनेक्ट करना चाहते है, और एक उपयोगकर्ता नाम/पासवर्ड उपयोगकर्ता को प्रमाणित करने के लिए:
समस्या निम्नलिखित है। तो मेरे पास एक क्लाइंट प्रमाणपत्र (पी 12 फ़ाइल) और एक सर्वर प्रमाण (पेम या डर फ़ाइल) है। मैं HttpURLConnection क्लास का उपयोग करने का प्रयास करता हूं, क्योंकि मैंने जो सुना है, उससे अपाचे लाइब्रेरी को एंड्रॉइड पर और समर्थित नहीं किया जाएगा।
// Load CAs from our reference to the file
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = new BufferedInputStream(new FileInputStream(serverCert));
X509Certificate serverCertificate;
try {
serverCertificate = (X509Certificate)cf.generateCertificate(caInput);
System.out.println("ca=" + serverCertificate.getSubjectDN());
} finally {
caInput.close();
}
Log.d(TAG, "Server Cert: " + serverCertificate);
// Create a KeyStore containing our trusted CAs
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
trustStore.setCertificateEntry("my ca", serverCertificate);
//Load the Client certificate in the keystore
KeyStore keyStore = KeyStore.getInstance("PKCS12");
FileInputStream fis = new FileInputStream(clientCert);
keyStore.load(fis,CLIENT_PASSWORD);
// Create a TrustManager that trusts the CAs in our KeyStore
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
//Build the SSL Context
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, pref.getString(Constants.clientCertificatePassword, "").toCharArray
());
//Create the SSL context
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
...
//And later, we use that sslContext to initiatize the socketFactory
urlConnection = (HttpsURLConnection) requestedUrl.openConnection();
urlConnection.setSSLSocketFactory(CertificateManager.getInstance().getSslContext().getSocketFactory());
...
तो मैं अपने SSLContext बना सकते हैं, और मेरे दो प्रमाण पत्र सामग्री प्रदर्शित:
तो यह मेरी कार्यान्वयन (serverCert और clientCert मेरी फ़ाइलों का पूरा पथ कर रहे हैं) है। लेकिन जब मैं अपने एचटीटीपीएस कनेक्शन को निष्पादित करने का प्रयास करता हूं, तो मुझे निम्न अपवाद मिलता है:
09-23 13: 43: 30.283: डब्ल्यू/सिस्टम.एर (1 9 422): javax.net.ssl.SSLHandshakeException: java.security। cert.CertPathValidatorException: प्रमाणीकरण पथ के लिए ट्रस्ट एंकर नहीं मिला।
क्या आप में से कोई भी निम्न त्रुटि से मिला है? आपका समाधान क्या था?
http://blog.chariotsolutions.com/2013/01/https-with-client-certificates-on.html
http://nelenkov.blogspot.ch/2011/12/using-custom-certificate-trust-store-on.html
मैंने इस समाधान को भी आजमाया (http://nelenkov.blogspot.ch/2011/12/using-custom-certificate-trust-store-on.html), लेकिन फिर भी वही संदेश ... क्या यह संभव है सर्वर अच्छी तरह से कॉन्फ़िगर नहीं है? – TheOnlyYam
अरे, यह काफी समय है, लेकिन क्या आपको कोई समाधान मिला? मुझे एक ही समस्या है। मेरे पास एक पेम और पी 12 फाइल है। – Wicked161089