【发布时间】:2017-05-09 07:25:01
【问题描述】:
当端点 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)
【问题讨论】:
-
您只需更改 url 并期望它像以前一样工作。 SSL 证书是针对特定 url 颁发的,如果您更改 url,则必须为新 url 颁发新证书并配置您的应用程序以使用该证书。
-
我的意思是你不能只是改变......
-
@OleksandrShpota 这些都不能解释“无法生成秘密”。如果握手达到
ServerHelloDone,则证书被接受。 -
@OleksandrShpota :我认为自从
ServerHelloDone完成后,它不应该是证书错误。是否有验证特定 URL 的证书? -
@siddharthachakraborty 你可以运行
openssl s_client -connect service.serviceprovider.com:5368 -showcerts并检查输出中的“主题”部分。
标签: java web-services ssl https ssl-certificate