通过 https 连接时出现 SSL 握手异常

SSL handshake exception while connecting over https

当端点 URL 中有 IP 地址时,我的 java 应用程序能够使用 https SSL 连接到第三方应用程序。 现在,当 IP 地址更改为主机名 时,我收到 “SSL 握手异常”。 除此之外,没有代码更新或任何其他更改。 唯一改变的是第三方在端点 URL 中使用主机名,而不是 IP 地址。

早些时候 URL:https://10.0.0.1:5368/invoke/Upload.Accept/receiveReply 当前 URL:https://service.serviceprovider.com:5368/invoke/Upload.Accept/receiveReply

知道是什么原因造成的以及如何解决吗?

如果需要更多详细信息,请告诉我。

下面是错误的堆栈跟踪:

javax.net.ssl.SSLHandshakeException: Could not generate secret
        at sun.security.ssl.DHCrypt.getAgreedSecret(DHCrypt.java:219)
        at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1056)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:348)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
        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 com.etsalat.adapter.sadad.PaymentLoadAdapter.run(PaymentLoadAdapter.java:130)
        at java.lang.Thread.run(Thread.java:748)

     Caused by: java.security.NoSuchAlgorithmException: TlsPremasterSecret SecretKeyFactory not available
        at javax.crypto.SecretKeyFactory.<init>(SecretKeyFactory.java:122)
        at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160)
        at iaik.security.dh.DHKeyAgreement.engineGenerateSecret(Unknown Source)
        at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:648)
        at sun.security.ssl.DHCrypt.getAgreedSecret(DHCrypt.java:217)

我之前遇到过同样的问题。

异常:"SecretKeyFactory not available" 如果您正在使用的数字签名 API 未添加到您的应用程序使用的 Java SDK。

要将 API 添加到 Java SDK: 1. 导航到 lib-signed 文件夹,然后将 API jar 文件(例如:iaik_jce.jar)复制到 /jre/lib/ext。 2. 导航到 /jre/lib/security,然后将以下内容添加到 java.security security.provider.10=iaik.security.provider.IAIK 注意:如果数字“10”正被另一个条目使用,请使用下一个可用的数字。

更多信息请参考:http://docs.oracle.com/cd/E61144_01/English/Install_and_Config/Automatic_Install_and_Config/helpmain.htm?toc.htm?89631.htm