通过https

时间:2017-05-09 07:25:02

标签: java web-services ssl https ssl-certificate

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

早期网址:https://10.0.0.1:5368/invoke/Upload.Accept/receiveReply 目前的网址: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)

1 个答案:

答案 0 :(得分:1)

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

例外:&#34; SecretKeyFactory不可用&#34;如果您使用的数字签名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 注意:如果数字为&#39; 10&#39;正在被另一个条目使用,请使用下一个可用的号码。

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