Внешняя компания выдала мне файл сертификата PFX, чтобы я мог подключиться к их серверу и подключиться к их API. Я преобразовал этот файл в JKS, используя следующую команду:
keytool -importkeystore -srckeystore foo.pfx -srcstoretype pkcs12 -destkeystore foo.jks -deststoretype JKS
Затем я взял этот гист , который показывает, как создать простой клиент Java SOAP, который будет отправлять полезные данные SOAP / XML. Я изменил его, чтобы указать на мой новый JKS, а также правильно установить пароль. Я также изменил URL, чтобы он явно указывал на * 1006
Однако при подключении я сталкиваюсь с этой проблемой:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.SignatureException: Signature does not match.
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
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.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1334)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1309)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:259)
at org.ofsted.SSLtest.run(SSLtest.java:216)
at org.ofsted.SSLtest.main(SSLtest.java:237)
Caused by: java.security.cert.CertificateException: java.security.SignatureException: Signature does not match.
at org.ofsted.SSLtest$1.checkServerTrusted(SSLtest.java:146)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1091)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
... 14 more
Caused by: java.security.SignatureException: Signature does not match.
at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:449)
at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:392)
at org.ofsted.SSLtest$1.checkServerTrusted(SSLtest.java:143)
... 16 more
Я прочитал другие посты, касающиеся следующей ошибки Java CertificationException:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.SignatureException:
Signature does not match
Я посмотрел другие посты об этой ошибке, и они говорят о доверии сертификату, присланному мне внешней компанией. Но я в замешательстве. Является ли файл PFX сертификатом? Я думал, что сертификат должен быть с расширением .crt? Нет? Любые советы будут очень полезны. Спасибо.