java - 升级 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)
...
我发现 JVM 版本Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.7.7
是1.8.0_161-b14
. 并且 JVM 版本Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.8.0
是1.8.0_171-b10
.
两个平台上的 tomcat 版本都是Apache Tomcat/8.0.50
.
所以我猜这是导致错误的JVM版本。
在阅读JDK 8u171 Update Release Notes后,我发现3DES Cipher Suites
在1.8.0_171-b11
. 我猜 handshake_failure 是由 3DES 密码套件被禁用引起的。
有什么可以避免avax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
的Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.8.0
吗?
解决方案
通过从in文件3DES_EDE_CBC
列表中删除,并重新启动 Elastic Beanstalk 应用程序,可以解决此问题。jdk.tls.disabledAlgorithms
/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 中的列表,我在fodler下jdk.tls.disabledAlgorithms
创建了一个名为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 作为值。
-> 重启tomcat。
经过上述操作后, 的值jdk.tls.disabledAlgorithms
将被持久化到 Elastic Beanstalk 启动的不同 EC2 中。
推荐阅读
- mysql - SP 不适用于表格的第一行
- angular - Angular 无法获取 *ngFor 数据以显示文件名列表
- brightway - 安装失败并出现“pip install brightway2”:离线安装
- kubernetes - 如何在 EKS 中将 ELB 检查协议声明为 HTTP
- excel - 没有 VBA 的动态组合框 ListFillRange
- sql - 如何制作两个表之间的关系表?SQL
- powershell - 如何在 Windows 10 的环境变量中为系统变量添加多个 PATH?
- swift - 如何使用 DispatchQueue 在 viewModel 中隐藏标签
- angular - 使用 @Viewchild 将 Angular 动态组件添加到特定位置
- isabelle - 有没有办法通过python与伊莎贝尔定理证明者进行通信?