美文网首页
Docker JDK8 TLS10 is not accepte

Docker JDK8 TLS10 is not accepte

作者: oO白眉大虾Oo | 来源:发表于2023-10-10 08:12 被阅读0次

    概述

    公司某个服务要连接 SqlServer 数据库,本地运行一切正常,打包成 docker 镜像后,镜像启动失败
    异常信息如下:
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS12]". ClientConnectionId:9b44ff23-25ac-4da3-8c9f-89cf55e46044

    环境

    Docker Java 基础镜像: openjdk:8-jdk
    JDK 版本:openjdk version "1.8.0_342"

    原因分析

    从2021年4月20日开始,OpenJDK的季度更新版本默认禁用所有版本的TLS1.0和TLS1.1
    而我们SqlServer版本较老,采用的凑巧是TLS1.0

    解决方案

    重新启用 TLS1.0 and TLS1.1
    java.security 文件位于 JDK 安装目录下,例如:/Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home/jre/lib/security
    1)确保 java.security 文件中的 security.overridePropertiesFile 值设置为 true(这通常是默认值)。
    2)创建一个文件:enableLegacyTLS.security,并写入如下内容:

    jdk.tls.disabledAlgorithms=jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA,DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, include jdk.disabled.namedCurves

    主要是去掉了 TLSv1 and/or TLSv1.1

    3)Dockerfile 配置文件中,增加 -Djava.security.properties=enableLegacyTLS.security 启动参数, 用于覆盖原有配置
    Dockerfile示例:

    FROM openjdk:8-jdk
    ENV TZ Asia/Shanghai
    VOLUME /tmp
    ADD ./target/xxx.jar xxx.jar
    ADD ./enableLegacyTLS.security enableLegacyTLS.security
    EXPOSE 9005
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Djava.security.properties=enableLegacyTLS.security","-XX:MaxRAMPercentage=75.0","-jar","api-pack.jar"]

    参考资料

    TLS 1.0/1.1 changes in OpenJDK and Amazon Corretto

    相关文章

      网友评论

          本文标题:Docker JDK8 TLS10 is not accepte

          本文链接:https://www.haomeiwen.com/subject/tfewbdtx.html