2014-01-08 118 views
1

我開始有問題前幾天訪問https://ws.plimus.com/async-http-client。我得到一個「通用的SSLEngine問題」的消息,並在堆棧跟蹤我可以看到它是由Certificate異常與異步HTTP客戶端爲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作爲提示,我發現的確如此,async-http-client庫uses the X509TrustManager interface,但我沒有太多可以做的改變。

運行此:

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

覺得沒有什麼,所以我甚至不知道該證書是導致該問題。

除了解決方法之外,我還能做些什麼嗎?

我把演示代碼重現問題on github

回答

3

你提到確實使用相同的威瑞信3類證書與我在other answer描述的md2WithRSAEncryption算法服務器:

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 ] ... 

仔細閱讀異步-http客戶端的javadoc,看起來您可以在構建AsyncHttpClientConfig的實例時調用setSSLContext

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

所以,你可以創建自己的SSLContextX509ExtendedTrustManager和配置異步HTTP客戶端庫使用它,而不是它的內部默認。這應該可以解決你的問題!

這裏是包含我用來調試此問題的SSL測試代碼的要點。您可以輕鬆從中提取您需要創建的自己的SSLContexthttps://gist.github.com/rocketraman/8312705