我正在尝试发出一个HTTPS请求来发送苹果推送通知(APN),以使用SoapUI 5.2.1测试我的应用程序。我对SoapUI进行了以下配置更改,以支持TLS1.2连接。
api.development.push.apple.com
链中的所有证书添加了一个私钥-Dsun.security.ssl.allowUnsafeRenegotiation=true -Dsoapui.https.protocols=TLSv1.2 -Dsoapui.https.ciphers=ECDHE-RSA-AES256-GCM-SHA384
如果我使用curl发送一个使用详细(-vvv)的推送通知,则TLS 1.2中的协商结果将与密码ECDHE-RSA256-GCM-SHA 384进行协商。因此,当与SoapUI连接时,协议和密码应该被Apple服务器所接受。
* 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请求时,我仍然得到错误ERROR:java.lang.IllegalArgumentException: Unsupported ciphersuite ECDHE-RSA-AES256-GCM-SHA384
当使用Java 7 JSSE密码套件名称时,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
仍然得到不支持的密码套件错误。
日志中没有详细的信息。有什么帮助/想法/想法/暗示吗?
更新1
我使用的是SoapUI 5.2.1MacOSX安装程序和集成的Java7。Java根据Java 7文档做的,不支持TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384密码套件。
将SoapUI 5.2.1MacOSX安装程序替换为不包括SoapUI的SoapUI 5.2.1MacOSXzip。我安装了Java 1.8.0_60,它确实支持必要的密码套件。(参考这里)
修改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
。可能与SoapUI可能不支持的HTTP/2协议有关。
更新2
正如@vzamanillo Java 8所建议的,默认情况下使用TLS 1.2,因此可以删除添加的Java选项。CipherSuite问题现在得到解决,出现了错误;
ERROR:org.apache.http.client.ClientProtocolExceptionis
这是一个与SSL、TLS或密码套件无关的错误,但可能是SoapUI不支持HTTP/2的一个问题。
发布于 2016-05-23 05:13:19
Java7不支持TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384加密套件,因此SoapUI 5.2.1使用了Java8。将Java选项Dsoapui.https.protocols=TLSv1.2设置为强制TLSc1.2也是不必要的,因为这是Java8的默认设置。
https://stackoverflow.com/questions/37344044
复制相似问题