HTTPSエンドポイントにデプロイされているプレリリース環境にデプロイされているWebサービスをテストする必要があります。残念ながら、SoapUIはSSLPeerUnverifiedException: peer not authenticated
例外で失敗します。バージョン4.6.4と非常に新しい5.0の両方を使用しました。
環境:
エンドポイントはhttps、startcom証明書、ネットワークはプロキシを使用します(ただし、異なるネットワークのプロキシなしの同じ問題)
私は何時間も費やしましたが、たぶん解決策を探して1日を過ごしました。特にこのリンクは有望に見えました: https://forum.soapui.org/viewtopic.php?f=13&t=20866
Firefox経由でエンドポイント証明書を抽出し、信頼させます。だから、soapui JVMインストールからcacerts
を変更しました。
..\SoapUI-4.6.4\jre\lib\security>keytool -import -alias HOSTNAME
-file endpoint.crt -keystore cacerts -storepass changeit
再起動してから再テスト-失敗します。
その後、別のアプローチを取り、SoapUI JVMにすべてのStartCom証明書を信頼させました。
keytool -import -trustcacerts -alias startcom.ca -file ca.crt -keystore cacerts
keytool -import -alias startcom.ca.sub -file sub.class1.server.ca.crt -keystore cacerts
再起動して再び失敗しました。今、他に何をしますか?
編集
2014-05-30 08:39:53,782 ERROR [errorlog] javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at Sun.security.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
at org.Apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.Java:128)
at org.Apache.http.conn.ssl.SSLSocketFactory.createLayeredSocket(SSLSocketFactory.Java:446)
at org.Apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.Java:499)
at com.eviware.soapui.impl.wsdl.support.http.SoapUISSLSocketFactory.createLayeredSocket(SoapUISSLSocketFactory.Java:268)
at org.Apache.http.impl.conn.DefaultClientConnectionOperator.updateSecureConnection(DefaultClientConnectionOperator.Java:200)
at org.Apache.http.impl.conn.AbstractPoolEntry.layerProtocol(AbstractPoolEntry.Java:277)
at org.Apache.http.impl.conn.AbstractPooledConnAdapter.layerProtocol(AbstractPooledConnAdapter.Java:142)
at org.Apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.Java:758)
at org.Apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.Java:565)
at org.Apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.Java:415)
at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:820)
at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:754)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.Java:238)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.Java:348)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.submitRequest(HttpClientRequestTransport.Java:318)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.Java:232)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.Java:123)
at Java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at Java.util.concurrent.FutureTask.run(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
SSLデバッグ:
adding as trusted cert:
Subject: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL
Issuer: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL
Algorithm: RSA; Serial number: 0x1
Valid from Sun Sep 17 21:46:36 CEST 2006 until Wed Sep 17 21:46:36 CEST 2036
Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
Thread-20, WRITE: TLSv1 Handshake, length = 186
Thread-20, READ: TLSv1 Alert, length = 2
Thread-20, RECV TLSv1 ALERT: warning, unrecognized_name
SSL - handshake alert: unrecognized_name
Thread-20, handling exception: javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
Thread-20, SEND TLSv1 ALERT: fatal, description = unexpected_message
Thread-20, WRITE: TLSv1 Alert, length = 2
Thread-20, called closeSocket()
Thread-20, IOException in getSession(): javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
09:16:12,482 ERROR [WsdlSubmit] Exception in request: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
OK、この問題の修正は設定することです
-Djsse.enableSNIExtension=false
$SOAPUI_HOME/bin/soapui.bat
理由はこの回答で説明されています: https://stackoverflow.com/a/14884941/1639556
ダイジェスト:
Java 7では、デフォルトで有効になっているSNIサポートが導入されました。特定の誤って構成されたサーバーが、SSLハンドシェイクで「認識できない名前」警告を送信することがわかりました。これは、Javaを除くほとんどのクライアントで無視されます。
Update:SoapUI 5.2.1の場合、ファイルを変更する必要がありましたSoapUI-5.2.1.vmoptions
bat
ファイルの変更が役に立たなかったため。
同じ回答を探しているMacを使用している人は誰でも(申し訳ありませんが、コメントするのに十分な評判ポイントがないので、選択した回答にコメントできません!!!)。アプリケーションフォルダーのアイコンをクリックするか、Spotlightを使用してアプリを起動する場合、soapui.shを編集しても影響はありません。
/Applications/SoapUI-5.0.0.app/Contents
Vmoptions.txtを編集し、ファイルの下部に-Dcom.Sun.net.ssl.checkRevocation = falseを追加します。保存して再起動します。
あなたは良いことをしていると思います。トラストストアにサーバー証明書をロードする場合、接続が機能する必要があります。たとえば、リダイレクトなどが発生している可能性があります。必要に応じて、SSLサーバー証明書の検証を無効にすることができます。 SOAPUIスタンドアロンバージョンを使用する場合は、$SOAPUI_HOME/bin/soapui.bat
または$SOAPUI_HOME/bin/soapui.sh
およびこのパラメーターを追加-Dcom.Sun.net.ssl.checkRevocation=false
as Javaオプション:
soapui.bat
set Java_OPTS=%Java_OPTS% -Dcom.Sun.net.ssl.checkRevocation=false
soapui.sh
Java_OPTS="$Java_OPTS -Dcom.Sun.net.ssl.checkRevocation=false"
お役に立てれば、
また、あなたがFiddlerを実行していないであることを確認してください。これは、SoapUIによって行われた要求のプロキシとして機能しようとします。 Fiddlerで動作させるには、JavaトラストストアにFiddlerルート証明書を追加する必要があります。
私も次のメッセージを受け取っていました:
Error getting response; javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
私が抱えていた問題は、プロキシサーバーを経由する場合のみでした。プロキシなしでインターネットに直接接続していました。
これらすべてのソリューションを試しましたが、どれも機能していませんでした。
WS-Security-Configurations-> Truststoresの下のJavaキーストアに信頼できるCA証明書を追加しようとしても、まだエラーが発生していました。
SoapUI 5.2.1にアップグレードしたところ、問題は解決しました。
試してみる価値があるかもしれません。
プロキシを使用している場合、同じものをバイパスしてみてください(ProxySettings経由でSoapUIの設定)