【问题标题】:Connecting to a database outside the docker container gives TLS version error连接到 docker 容器外的数据库会导致 TLS 版本错误
【发布时间】:2021-07-31 18:48:07
【问题描述】:

我有一个 Spring Boot 应用程序,它连接到不在容器内的数据库。构建映像并运行后,出现以下异常:

Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]
    at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source) ~[na:na]
    at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source) ~[na:na]
    at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(Unknown Source) ~[na:na]
    at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(Unknown Source) ~[na:na]

在我的 docker 文件中,我厌倦了将 https.protocols 更新为 TLSv1.2,如下所示,但没有按预期工作:

FROM adoptopenjdk/openjdk11:alpine-jre
ARG JAR_FILE=target/portal-0.0.1-SNAPSHOT.jar
WORKDIR /appPortal
COPY ${JAR_FILE} portal.jar
ENTRYPOINT ["java","-Dcom.ibm.jsse2.overrideDefaultTLS = true","-Djdk.tls.client.protocols = 
TLSv1.2","-Dhttps.protocols = TLSv1.2","-jar","portal.jar"]

也许我试图错误地设置 tls 版本,对此有何建议?

【问题讨论】:

    标签: docker dockerfile tls1.2


    【解决方案1】:

    只是想在这里添加一个直截了当的答案以供将来参考。我将基础映像用作 docker 文件的“adoptopenjdk/openjdk11:alpine-jre”,似乎 TLS 版本默认为 TLS10。因此,正如@Vinod 和其他一些线程 different types of openjdk 11 所建议的那样,我使用了 openjdk:11.0.6-jre-slim,它帮助我省略了额外的入口点选项来设置 TLS 版本。

    【讨论】:

      【解决方案2】:

      我认为问题在于服务器使用的是 TLS 1.0,但您的 jvm 默认不支持。

      注意:如果您使用默认禁用 TLS 1.0 的 openjdk 11.0.11(自 2021 年 4 月中旬起),您可能会遇到此类问题。

      如果您无法设置数据库服务器以支持更新的 TLS 版本,您 可以通过覆盖默认值来解决此问题:

      • 找到属性文件/security/java.security
      • 找到具有“jdk.tls.disabledAlgorithms”属性的行
      • 取出 TLSv1

      【讨论】:

      • 感谢@Bee Chow的解释,我将docker文件中的openjdk版本改为:openjdk:11.0.6-jre-slim
      • 是的,如果您可以退回到旧版本,它也应该可以工作。
      【解决方案3】:

      您更改了入口点中的 TLS/SSL 协议作为选项,但协议应在操作系统(容器级别)支持。

      如果图片没有附件,可以试试官方openjdk测试一下。

      https://hub.docker.com/_/openjdk

      【讨论】:

        猜你喜欢
        • 2021-05-22
        • 2016-07-03
        • 2021-09-03
        • 2020-03-29
        • 2023-04-02
        • 1970-01-01
        • 2023-03-19
        • 2020-05-30
        • 1970-01-01
        相关资源
        最近更新 更多