2014-01-08 2 views
1

У меня возникли проблемы с доступом к https://ws.plimus.com/ с async-http-client несколько дней назад. Я получаю «проблема Общие SSLEngine» сообщения, и в трассировки стека я могу видеть, что это вызваноCertificateException с async-http-client для https

java.security.cert.CertificateException: Certificates does not conform to algorithm constraints 

This SO question описывает в основном то же самое. Commenting out the line in java.security заставляет ошибку уйти, но я полагаю, что есть причина, по которой MD2 будет отключен.

Используя подсказки Raman's answer, я нашел, что действительно, асинхронная http-клиентская библиотека uses the X509TrustManager interface, но я не могу ее изменить.

Запуск этого:

openssl s_client -showcerts -connect ws.plimus.com:443 | grep -i md2 

ничего не находит, так что я даже не знаю, какой сертификат является причиной проблемы.

Есть ли что-то, что я могу сделать, кроме обходного пути?

Я разместил демо-код, который воспроизводит проблему on github.

ответ

3

Сервер, который вы упомянули, действительно использовать тот же Verisign Class 3 серта с алгоритмом md2WithRSAEncryption, что я описал в моем other answer:

openssl s_client -showcerts -no_ign_eof -connect ws.plimus.com:443 
CONNECTED(00000003) 
... [ stripped ] ... 
3 s:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority 
    i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority 
-----BEGIN CERTIFICATE----- 
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG 
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz 
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV 
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt 
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN 
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE 
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is 
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G 
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do 
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc 
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k 
-----END CERTIFICATE----- 

, а затем преобразовать этот сертификат в текстовом виде:

openssl x509 -text -noout < cert.pem 
Certificate: 
    Data: 
     Version: 1 (0x0) 
     Serial Number: 
      70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf 
    Signature Algorithm: md2WithRSAEncryption 
     Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority 
     Validity 
      Not Before: Jan 29 00:00:00 1996 GMT 
      Not After : Aug 1 23:59:59 2028 GMT 
     Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority 
... [ stripped ] ... 

Прослушивание javadocs для async-http-client, похоже, вы можете позвонить setSSLContext при создании экземпляра AsyncHttpClientConfig:

https://github.com/AsyncHttpClient/async-http-client/blob/master/api/src/main/java/org/asynchttpclient/AsyncHttpClientConfig.java#L841

Таким образом, вы можете создать свой собственный SSLContext с X509ExtendedTrustManager и настроить библиотеку HTTP клиента асинхронной использовать его вместо своего внутреннего дефолта. Это должно решить вашу проблему!

Это Gist, который содержит тестовый код SSL, который я использовал для отладки этой проблемы. Вы можете легко извлечь из этого то, что вам нужно, создать свой собственный SSLContext: https://gist.github.com/rocketraman/8312705.

Смежные вопросы