SoapUI无法连接HTTPS(SSLPeerUnverifiedException)

时间:2014-05-29 11:42:31

标签: java ssl soapui

我需要测试部署在HTTPS端点上部署的预发布环境的Web服务。不幸的是,SoapUI因SSLPeerUnverifiedException: peer not authenticated异常而失败。我使用了4.6.4和非常新的5.0版本。

ENV:

端点是https,startcom证书,网络使用代理(但是相同的问题,没有代理与不同的网络)

我花了很多时间,也许每天都在谷歌搜索解决方案。特别是这个链接看起来很有希望: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

7 个答案:

答案 0 :(得分:13)

好的,此问题的解决方法是设置

-Djsse.enableSNIExtension=false
$SOAPUI_HOME/bin/soapui.bat

中的

答案中描述了原因:https://stackoverflow.com/a/14884941/1639556

摘要:

Java 7引入了默认启用的SNI支持。我发现某些配置错误的服务器会发送一个"无法识别的名称" SSL握手中的警告被大多数客户端忽略......除了Java。

更新:对于SoapUI 5.2.1我必须更改文件SoapUI-5.2.1.vmoptions,因为修改bat文件没有帮助。

答案 1 :(得分:5)

对于任何使用Mac寻找相同答案的人(对不起,它不会让我对所选答案发表评论,因为我还没有足够的声望点评论!!!)。 如果您通过单击“应用程序”文件夹中的图标或使用Spotlight来启动应用程序,则编辑soapui.sh不会产生任何影响。

/Applications/SoapUI-5.0.0.app/Contents

编辑vmoptions.txt并将-Dcom.sun.net.ssl.checkRevocation = false添加到文件的底部..保存并重新启动。

答案 2 :(得分:4)

我认为你做的事情很好。如果您在信任库上加载服务器证书,则连接必须正常工作,可能会发生某种情况,例如重定向。如果需要,可以尝试禁用SSL服务器证书验证。如果您使用SOAPUI独立版本,请编辑$SOAPUI_HOME/bin/soapui.bat$SOAPUI_HOME/bin/soapui.sh并将此参数-Dcom.sun.net.ssl.checkRevocation=false添加为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"

希望这有帮助,

答案 3 :(得分:2)

如果您使用代理,请尝试绕过相同的代理(通过ProxySettings是SoapUI偏好设置)

答案 4 :(得分:2)

还要确保你没有运行Fiddler ,它将尝试充当SoapUI发出的任何请求的代理。如果要使其与Fiddler一起使用,则需要将Fiddler根证书添加到Java信任库。

另请参阅:SoapUI not working with fiddler for REST service testing

答案 5 :(得分:2)

我也收到了以下信息:

Error getting response; javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

我遇到的问题只是在通过代理服务器时。在没有代理的情况下直接连接到Internet正在运行。

我尝试了所有这些解决方案,但都没有工作。

我甚至尝试在WS-Security-Configurations下的Java密钥存储区中添加可信CA证书 - &gt; Truststores并且仍然感到恐怖。

我已升级到SoapUI 5.2.1,问题现已解决。

你可能值得尝试一下。

答案 6 :(得分:0)

我尝试同时使用-Dcom.sun.net.ssl.checkRevocation=false-Djsse.enableSNIExtension=false这两个选项,但这两个选项似乎都不起作用。

所做的工作是将证书导入SoapUI的证书存储中。我知道询问者已指定他们已经完成此操作,但是尚不清楚哪个 SoapUI实际选择使用哪个证书存储。

我能够导入证书并通过执行以下操作来使用它:

  1. 确保SoapUI已关闭。
  2. http://keystore-explorer.org/downloads.html下载Keystore Explorer(使用独立的“全部”版本)并将其解压缩到某处。
  3. 从管理员命令提示符运行密钥存储资源管理器,并使用捆绑的SoapUI JVM
C:\> "C:\Program Files\SmartBear\SoapUI-5.6.0\jre\bin\java.exe" -jar "path\to\kse.jar"
  1. 在密钥库资源管理器中,单击“打开CA证书密钥库”。
  2. 现在转到“检查”>“检查SSL”,输入服务器的URL,单击确定以查看“证书详细信息”对话框。
  3. 单击导入按钮,然后输入所需的别名,然后单击确定
  4. 您将看到一个对话框,指出“可信证书导入成功”,单击确定将其关闭。然后再次单击确定以关闭“证书详细信息”对话框。
  5. Ctrl + S 或单击“保存”图标以更新根证书存储。退出Keystore Explorer。
  6. 运行SoapUI,它不应再惨不忍睹。

最后,SoapUI是可怕的软件,您应尽可能避免使用它。但这对于大多数Java应用程序都是常见的。