Java https异步http客户端的CertificateException

Java https异步http客户端的CertificateException,java,ssl,asynchttpclient,Java,Ssl,Asynchttpclient,几天前,我开始在访问时遇到问题。我收到一条“一般SSLEngine问题”消息,在堆栈跟踪中我可以看到它是由 java.security.cert.CertificateException: Certificates does not conform to algorithm constraints 描述了基本相同的事情。使错误消失,但我认为禁用MD2是有充分理由的 使用for-hints,我发现异步http客户机库确实存在问题,但要改变这一点,我无能为力 运行此: openssl s_clie

几天前,我开始在访问时遇到问题。我收到一条“一般SSLEngine问题”消息,在堆栈跟踪中我可以看到它是由

java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
描述了基本相同的事情。使错误消失,但我认为禁用MD2是有充分理由的

使用for-hints,我发现异步http客户机库确实存在问题,但要改变这一点,我无能为力

运行此:

openssl s_client -showcerts -connect ws.plimus.com:443 | grep -i md2
找不到任何内容,因此我甚至不知道是哪个证书导致了问题

除了解决办法,我还能做些什么吗


我用演示代码再现了这个问题。

您提到的服务器确实使用了与我在我的:

openssl s_客户端-showcerts-no_ign_eof-connect ws.plimus.com:443
已连接(00000003)
... [剥离]。。。
3 s:/C=US/O=VeriSign,Inc./OU=3级公共初级认证机构
i:/C=US/O=VeriSign,Inc./OU=3级公共初级认证机构
-----开始证书-----
MIICPDCCAAUCEHC65B0Q2SK0TJJKEWPMUR8WDQYJKOZHIHVCNAQECBQAWXZELMAK
A1UEBHMCVVMXFZAVBGNVBAOTDLZLCMLTAWDULCBJBMMUMTCWNQYDVQLEY5DBGFZ
CyaziFB1YMxPyyBqCmlTxJ5IENLCNRPZMLJYXRPB24GQxV0AG9YAXR5MB4XDTk2
Mdeyotawmdawmfoxdti4mdgwmtizntk1ovowxzelmakga1ebhmcvvmxfzavbgnv
Baotdlzlcmltawdulcbjbmmumtcwnqydvqley5dbgfzcyazifb1ymxpyybqcmlt
YXJ5IENLCNRPZMMLJYXRPB24GQXV0AG9YAXR5MIGFMA0GCSQGSIB3DQEBAQA4GN
ADCBIQKBGQDJXFME8HUKARS0EN8EQNVJV69QRUCPHAWL0TPZ2RHP7GJYYX3KQHE
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
I19wKTakyYbnsZogy1Olhec9vn2a/IRFM9x2Fe0PonfkTgugwhfpWidaqabmA0g
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AORHIZKBXNKI98TSX63/Do
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
AA9WJQKZ7AKQRUZKKPFAYW7XZVJOYVGM5MKF5P/AfbdynMk2OmufTqj/ZA1k
-----结束证书-----
然后将该证书转换为文本形式:

opensslx509-text-noout
仔细阅读javadocs for async http client,您似乎可以在构建
AsyncHttpClientConfig
的实例时调用
setSSLContext

因此,您可以使用
X509ExtendedTrustManager
创建自己的
SSLContext
,并配置异步http客户端库以使用它,而不是它的内部默认值。那应该能解决你的问题

下面是一个要点,其中包含我用来调试此问题的SSL测试代码。您可以从中轻松提取创建自己的
SSLContext