Я пытаюсь отправить HTTP-запрос на сервер приложений, защищенный с помощью SSL. У меня есть самоподписанный сертификат X.509 от команды сервера. Я последовал за учебник от documentation, но все-таки получил SSLHandshakeException
: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Не удается реализовать SSL-соединение с сервером с использованием самозаверяющего сертификата
Я использую этот код:
CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");
AssetManager assManager = ShoppingHelperApp.getContext().getAssets();
InputStream is = assManager.open("keystore2.crt");
InputStream caInput = new BufferedInputStream(is);
Certificate ca = cf.generateCertificate(caInput);
caInput.close();
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
context = SSLContext.getInstance("TLS");
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(context.getSocketFactory());
Кто-нибудь имеет понятия, как решить эту проблему?
Спасибо за ответ! Мне кажется, что наши фрагменты почти одинаковы, за исключением расширения сертификата. Я пробовал с .pem, но это тоже не сработало :( – mol
@mol его не имеет большого значения;) http://stackoverflow.com/questions/4691699/how-to-convert-crt-to-pem – mklimek
да, я уже пробовал, такое же исключение. – mol