升级 AWS Elastic Beanstalk 平台版本后的handshake_failure



我有一个 AWS Elastic Beanstalk 环境,其当前平台为Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.7.7

我发现升级到Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.8.0后,其上的程序开始显示javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure错误。

下面是错误堆栈跟踪的一部分:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2020)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1127)
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.getInputStream0(HttpURLConnection.java:1570)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
at com.bionime.util.notice.sms.MitakeUtil.sendMessage(MitakeUtil.java:94)
at com.bionime.util.notice.sms.MitakeUtil.sendMessage(MitakeUtil.java:132)
...

我发现Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.7.7上的JVM版本是1.8.0_161-b14。而Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.8.0上的JVM版本是1.8.0_171-b10

两个平台上的雄猫版本都是Apache Tomcat/8.0.50.

所以我想是JVM版本导致了错误。

阅读JDK 8u171更新发行说明后,我发现3DES Cipher Suites1.8.0_171-b11中被禁用。我猜handshake_failure是由禁用 3DES 密码套件引起的。

我能做些什么来避免avax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failureTomcat 8 with Java 8 running on 64bit Amazon Linux/2.8.0

从文件中jdk.tls.disabledAlgorithms列表中删除3DES_EDE_CBC/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.37.amzn1.x86_64/jre/lib/security/java.security,然后重新启动 弹性豆茎应用,这个问题可以解决。

此操作将重新启用对 3DES 密码套件的支持。

我从以下位置获得此信息 本文。


为了修改 Elastic Beanstalk 中的jdk.tls.disabledAlgorithms列表,我在 fodler 下创建了一个名为java-security.config的文件.ebextensions其中包含以下内容:

# Create a file named java-security under /usr/share/tomcat8/conf to override the default value of jdk.tls.disabledAlgorithms
files: 
"/usr/share/tomcat8/conf/java-security" :
mode: "000755"
owner: tomcat
group: tomcat
content: |
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, EC keySize < 224, DES40_CBC, RC4_40

这将覆盖默认值jdk.tls.disabledAlgorithms,从而启用 3DES 密码套件。

然后我去弹性豆茎环境

->配置

->软件

-> 环境属性

-> 名称键入 java.security.properties,值键入/usr/share/tomcat8/conf/java-security。

-> 重新启动雄猫。

完成上述操作后,jdk.tls.disabledAlgorithms的值将持久化在 Elastic Beanstalk 启动的不同 EC2 中。

最新更新