當端點URL包含IP地址時,我的Java應用程序能夠使用https SSL連接連接到第三方應用程序。 現在,當IP地址更改爲主機名時,我得到「SSL握手異常」。 除此之外,沒有代碼更新或任何其他更改。 只有改變了所做的事情,就是多方會在端點URL中使用主機名,而不是IP地址。通過https連接時發生SSL握手異常
早些時候網址: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頒發新證書並配置您的應用程序以使用該證書。 –
我的意思是你不能只是改變...... –
@OleksandrShpota沒有解釋'不能產生祕密'。如果握手達到了「ServerHelloDone」,則證書被接受。 – EJP