You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Artifactory7.38.10配置MSSQL元数据库启动报TLS握手失败故障

问题描述

在Windows服务器上安装Artifactory 7.38.10,在system.yml中配置Microsoft SQL Server作为元数据存储数据库,参考的JDBC连接串格式如下:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true;trustServerCertificate=true";

执行artifactory.bat启动服务时抛出如下错误:

Could not initialize database (db config: {mssql jdbc:sqlserver://dev.tfs2017sql.xyz.com:55300;databaseName=JFROGPOC;encrypt=false;sendStringParametersAsUnicode=false;applicationName=Artifactory Binary Repository;integratedSecurity=true;}): TLS Handshake failed: x509: certificate signed by unknown authority
error connecting to database. giving up
报错栈:jfrog.com/metadata/v7/services/common/db.(*databaseBearer).init jfrog.com/metadata/v7@v7.37.0/services/common/db/database_bearer.go:152

当前运行环境Java版本为11,JDBC驱动采用适配Windows集成认证的mssql-jdbc_auth-10.2.1.x64.dll。

排查解决方案

核心根因:10.x版本的MSSQL JDBC驱动默认强制对所有连接启用登录阶段TLS握手,即便连接串设置encrypt=false,仍会校验SQL Server服务端返回的TLS证书,当前JDK信任库中不存在该证书的签发根CA,因此抛出信任校验失败错误,该问题与Windows集成认证的dll文件无直接关联。
可按以下优先级选择方案修复:

  • 非生产/测试环境快速修复
    直接在现有JDBC连接串末尾追加;trustServerCertificate=true参数,跳过证书校验,修改后的完整连接串示例:
    jdbc:sqlserver://dev.tfs2017sql.xyz.com:55300;databaseName=JFROGPOC;encrypt=false;sendStringParametersAsUnicode=false;applicationName=Artifactory Binary Repository;integratedSecurity=true;trustServerCertificate=true
    
    保存system.yml后重启Artifactory服务即可验证,该配置存在中间人攻击风险,禁止在生产环境使用。
  • 生产环境合规修复(导入证书到JDK信任库)
    1. 向数据库管理员获取SQL Server实例当前使用的TLS证书的根CA公钥文件(.cer格式)
    2. 定位Artifactory启动时实际加载的JDK路径,找到信任库文件,默认路径为$JAVA_HOME/lib/security/cacerts(若使用Artifactory内置JDK,则在Artifactory安装目录下的jdk子目录中查找,cacerts默认密码为changeit)
    3. 打开CMD执行keytool命令导入证书:
    keytool -importcert -alias mssql_jfrog_poc -file "C:\cert\sqlserver_root.cer" -keystore "C:\Program Files\Java\jdk-11\lib\security\cacerts" -storepass changeit
    
    执行后输入y确认信任该证书。
    4. 执行以下命令验证证书已成功导入:
    keytool -list -alias mssql_jfrog_poc -keystore "C:\Program Files\Java\jdk-11\lib\security\cacerts" -storepass changeit
    
    1. 重启Artifactory服务即可正常连接。
  • 额外校验项
    • 确认mssql-jdbc_auth-10.2.1.x64.dll版本与JDBC驱动主版本完全一致,且文件已放入JDK的bin目录或Windows系统System32目录,避免集成认证异常干扰排查
    • 检查system.yml中数据库配置段的JDBC串无多余转义字符、空格,配置格式符合要求
    • 若使用自签名证书,也可将根证书导入Windows系统的「受信任的根证书颁发机构」存储,部分JDBC驱动版本可自动读取系统证书,但稳定性弱于直接导入JDK信任库的方案。

内容的提问来源于stack exchange,提问作者Srinivas Charan Mamidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:36:16