当前位置: 首页 > 知识库问答 >
问题:

连接到docker容器之外的数据库会出现TLS版本错误

吴单鹗
2023-03-14

我有一个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版本不正确,对此有什么建议吗?

共有1个答案

秦光启
2023-03-14

我认为问题在于服务器使用的是TLS1.0,而您的jvm在默认情况下不支持。

注意:如果您使用openjdk 11.0.11(自2021年4月中旬以来),您可能会遇到这样的问题,它默认情况下禁用了TLS1.0。

如果无法将db服务器设置为支持较新的TLS版本,则可以通过重写默认值来解决此问题:

  • 查找属性文件/security/java.security
  • 查找具有“jdk.tls.disabledalgorithments”属性的行
  • 取出TLSV1
 类似资料:
  • 在将Django docker容器连接到Postgres数据库时,我收到以下错误。 下面是运行容器的Dockerfile pg_hba.conf->宿主all all 0.0.0.0/0 md5 我已经读到上面的以下细节打开数据库上的连接。

  • 我使用Docker在远程Linux计算机上安装了一个服务。我使用了以下命令 docker运行-p 4443:4443--rm-e openvidu.secret=my_secret-e openvidu.publicurl=https://187.84.228.66:4443 openvidu/openvidu-server-kms 但当我第一次尝试do connect时,我收到了以下错误消息:

  • 我正在处理dockerize我的本地服务器,在那里有数据库,应用程序服务器和所有额外的配置来部署我的应用程序。目前,我已经创建了3个docker容器,运行像Tomcat或WildFly这样的应用程序服务器,并公开了部署的应用程序的端口,这些端口Java并从/读写数据。到我本地的数据库。在每个应用程序的文件中,我已经通过在我的实际配置中配置了访问权限,没有docker也可以。 我想将容器上的应用程序

  • 我有一个linux postgres数据库,在我的本地主机端口5432上运行。我的机器网卡的IP是192.168.68.80。我的postgres配置文件如下所示: 现在,我想从docker容器中运行的节点应用程序连接到这个数据库。这是我的环境变量文件加载到节点时的样子: 完成此设置后,我使用docker文件构建docker映像。然后,我尝试在linux上使用以下命令将dockerfile作为容器

  • 问题内容: 我最近一直在研究Docker和QGIS,并按照本教程中的说明安装了一个容器。 尽管我无法连接到包含我的所有GIS数据的localhost postgres数据库,但一切工作都很好。我认为这是因为我的postgres数据库未配置为接受远程连接,并且已经按照本文中的说明编辑了postgres conf文件以允许远程连接。 尝试连接到在Docker中运行QGIS的数据库时,我仍然收到错误消息

  • 我最近一直在玩Docker和QGIS,并按照本教程中的说明安装了一个容器。 我运行的是Ubuntu 14.04;Postgres 9.3