java - 发出 HTTPS 请求时在 SoapUI 5.2.1 中获取不支持的密码套件

标签 java ssl-certificate soapui tls1.2

我正在尝试发出 HTTPS 请求来发送 Apple 推送通知 (APN),以使用 SoapUI 5.2.1 测试我的应用程序。我对 SoapUI 进行了以下配置更改以支持 TLS 1.2 连接。

  • 我创建了一个 jks keystore ,并添加了 iOS 应用程序的私钥以及 api.development.push.apple.com 链中的所有证书
  • 在 SoapUI SSL 设置中,我设置了 KeyStore、KeystorePassword 并选中“需要客户端身份验证”
  • 在 SoapUI 的 vmoptions.txt 中,我添加了以下 Java 选项

-Dsun.security.ssl.allowUnsafeRenegotiation=true -Dsoapui.https.protocols=TLSv1.2 -Dsoapui.https.ciphers=ECDHE-RSA-AES256-GCM-SHA384

  • SoapUI jre.bundle 中的 JCE 文件已替换为 Unlimited Strength Jurisdiction 策略文件。

如果我使用curl 使用详细(-vvv) 发送推送通知,则协商结果为带有密码ECDHE-RSA-AES256-GCM-SHA384 的TLS 1.2。因此,在与 SoapUI 建立连接时,Apple APN 服务器应接受协议(protocol)和密码。

* Connected to api.development.push.apple.com (17.172.238.203) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ECDHE-RSA-AES256-GCM-SHA384
* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS handshake, CERT verify (15):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384

现在在 SoapUI 中向 https://api.development.push.apple.com/3/device/{device id} 发出 HTTPS Post 请求时,我仍然收到错误 错误:java.lang.IllegalArgumentException:不支持的密码套件ECDHE-RSA-AES256-GCM-SHA384

使用 Java 7 JSSE Cipher Suite 时name TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 仍然收到不支持的密码套件错误。

日志中没有详细信息..有任何帮助/想法/想法/提示吗?

更新1

我使用的是带有集成 Java 7 的 SoapUI 5.2.1 Mac OS X 安装程序。 Java按照Java 7 documentation来做不支持 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 密码套件。

用不包含 Java 的 SoapUI 5.2.1 Mac OS X zip 替换了 SoapUI 5.2.1 Mac OS X 安装程序。我安装了 Java 1.8.0_60,它支持必要的密码套件。 (引用here)

修改了soapui.sh脚本以包含必要的Java选项

if [ $SOAPUI_HOME != "" ]
then
    JAVA_OPTS="$JAVA_OPTS -Dsoapui.ext.libraries=$SOAPUI_HOME/bin/ext"
    JAVA_OPTS="$JAVA_OPTS -Dsoapui.ext.listeners=$SOAPUI_HOME/bin/listeners"
    JAVA_OPTS="$JAVA_OPTS -Dsoapui.ext.actions=$SOAPUI_HOME/bin/actions"
    JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$SOAPUI_HOME/bin"
    JAVA_OPTS="$JAVA_OPTS -Dwsi.dir=$SOAPUI_HOME/wsi-test-tools"
  JAVA_OPTS="-Dsun.security.ssl.allowUnsafeRenegotiation=true"
  JAVA_OPTS="-Dsoapui.https.protocols=TLSv1.2"
  JAVA_OPTS="-Dsoapui.https.ciphers=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
  JAVA_OPTS="-Djavax.net.debug=ssl,handshake"
#uncomment to disable browser component
#   JAVA_OPTS="$JAVA_OPTS -Dsoapui.browser.disabled=true"
fi

现在出现下一个错误ERROR:org.apache.http.client.ClientProtocolException。 可能与 HTTP/2 协议(protocol)相关,SoapUI 可能不支持该协议(protocol)。

更新2

正如 @vzamanillo 所建议的,Java 8 默认使用 TLS 1.2,因此可以删除附加的 Java 选项。 CipherSuite 问题现已解决,错误;

ERROR:org.apache.http.client.ClientProtocolExceptionis

该错误与 SSL、TLS 或密码套件无关,但可能是 SoapUI 不支持 HTTP/2 的问题。

最佳答案

Java 7 不支持 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 密码套件,因此 SoapUI 5.2.1 使用 Java 8。也无需设置 Java 选项 Dsoapui.https.protocols=TLSv1.2 来强制使用 TLSc1.2,因为这是 Java 8 的默认设置。

关于java - 发出 HTTPS 请求时在 SoapUI 5.2.1 中获取不支持的密码套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344044/

相关文章:

java - 向 sqlite 数据库添加新属性

C# 通过配置文件忽略证书错误

groovy - 如何使用groovy在soapui中创建日期时间字符串

rest - 带有路径参数的 SoapUI REST Web 服务模拟

testing - 使用 groovy 使 soapUI 测试用例失败但不中止

java - 如何获取调整大小的BufferedImage

java - 创建 Restful 客户端后在 Maven 中出现异常

java - 为什么将 ArrayList 值加载到 HashMap 后不打印?

azure - 配置应用程序服务证书似乎需要对 Key Vault、IBYP 进行写入访问?

ssl - 申请 SSL 证书的人必须在他们的机器上有他们的私钥吗?