javax.net.ssl.SSLKeyException:ECDH服务器密钥交换消息上的签名无效(在java中)



在从java发出简单的http GET请求时,出现以下异常。(实际上来自jsoup java api)。

javax.net.ssl.SSLKeyException: Invalid signature on ECDH server key exchange message
        at sun.security.ssl.HandshakeMessage$ECDH_ServerKeyExchange.<init>(HandshakeMessage.java:1098)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:278)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:913)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:849)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1035)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:512)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:493)
        at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:205)
        at org.jsoup.helper.HttpConnection.get(HttpConnection.java:194)
        at com.ampower.scraper.data.util.DocumentUtil.test(DocumentUtil.java:205)
        at com.ampower.scraper.goolesearch.email.EmailScraper.doGoogleSearch(EmailScraper.java:87)
        at com.ampower.scraper.goolesearch.email.EmailScraper.main(EmailScraper.java:50)

这里iam使用的java版本是1.7.0_101。请提出建议。

这可能是证书过期的问题。我偶然发现了同样的错误;在调试SSL/TLS连接后,我注意到所说的证书不再有效:

Validaty: [From: date-in-the-past,
           To: date-in-the-past]

一旦重新确定,错误就消失了。

尝试以下选项之一:

选项1:JDK升级

如果可能,请将JDK版本更改为新版本,并检查是否再次遇到相同的问题。

备选方案2:可能的已知问题

也有类似问题的报道。解决方案来自于jdk.tls.client.protocols系统属性的使用。

选项3:禁用TLS证书验证

Jsoup.connect(url).validateTLSCertificates(false).get();

选项4:调试SSL交换机

将目标网站的url粘贴到此处:Comodoca的SSL分析器

请参阅SO答案中的完整详细方法(为什么不是Java7?)。

另请参阅:

  • Android Jsoup证书问题
  • 获取javax.net.ssl.SSLException:使用Jsoup抓取数据时收到致命警报:protocol_version
  • HttpConnection#validateLSC证书

相关内容

  • 没有找到相关文章

最新更新