Добавлена поддержка шифрования Camellia в Java и HttpClient

#java #security #encryption #httpclient #jce

#java #Безопасность #шифрование #httpclient #jce

Вопрос:

Я использую HttpClient 4 для ПОЛУЧЕНИЯ URL-адреса https. Сервер имеет действительные сертификаты, и фактически доступ к тому же 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 не поддерживает Camellia. см. 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());
}
  

Предположительно, это добавляет поддержку Camellia.

Но все равно не повезло.

Комментарии:

1. Это не имеет ничего общего с Camellia или RC4.

2. Привет, Грег, так каков же твой диагноз?

3. Я предполагаю, что ваше хранилище доверия не содержит сертификата CA для CA, который подписал сертификат этого SSL-сервера.

4. Сертификаты не используют симметричное шифрование. SSL / TLS обеспечивает безопасность транспорта. Сертификаты проходят проверку подлинности до настройки защищенного канала, поэтому я думаю, что GregS прав.

5. Поставщик услуг изменил шифрование с Camellia на AES, и тот же фрагмент кода работал идеально. Поэтому я не уверен, почему шифрование Camellia не работает с кодом Java.