Я использую HttpClient 4 для получения https URL. Сервер имеет действительные сертификаты, и на самом деле доступ к тому же URL-адресу https из Chrome работает нормально, без предупреждений.
Однако из кода Java, при выполнении, я получаю:
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
Тот же код прекрасно работает с одной ссылкой https, а не с другой. Основное различие, которое я вижу между рабочим и нерабочим сертификатом, заключается в следующем:
Рабочий использует RC4_128
Тот, кто выдает исключение, использует CAMELLIA 256 CBC
Затем я узнал, что Java не поддерживает Камелию. см http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6537034 и http://en.wikipedia.org/wiki/Comparison_of_TLS_Implementations#Encryption_Algorithms
Как я могу добавить эту поддержку в мой код HttpClient?
Я добавил библиотеку BouncyCastle и провайдера безопасности
static {
Security.addProvider(new BouncyCastleProvider());
}
Предположительно добавлена поддержка Камелии.
Но все равно не повезло.