当端点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)
答案 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;正在被另一个条目使用,请使用下一个可用的号码。