GitLab运行单元测试连接SQL Server因TLS10不被接受报错求助
问题根因
报错核心原因是内网GitLab Runner环境的Java 11默认将TLS 1.0加入了TLS协议禁用列表,而老旧SQL Server仅支持TLS 1.0,握手阶段协商失败。本地运行正常是因为你的本地Java环境要么修改过默认安全配置,要么JDBC连接参数已经适配了TLS 1.0要求。
可行解决方案(满足所有限制条件)
方案1:修改JDBC连接URL参数(优先推荐,无需修改运行环境)
- 在数据库连接URL后追加以下参数,即可强制JDBC驱动使用TLS 1.0协议协商:
sslProtocol=TLSv1;tlsVersions=TLSv1 - 完整连接URL示例:
jdbc:sqlserver://<数据库地址>:<端口>;databaseName=<库名>;encrypt=true;trustServerCertificate=true;sslProtocol=TLSv1;tlsVersions=TLSv1
如果业务允许非加密连接,也可以直接添加encrypt=false参数跳过SSL校验,同样可以解决问题。
方案2:修改GitLab CI执行参数(无需修改业务代码,仅调整CI配置)
如果不方便修改连接配置,可以直接在Gradle测试命令中添加JVM参数,覆盖Java 11默认的禁用TLS规则,修改你的gitlab-ci.yml的script部分即可:
test: stage: test tags: - Linux script: - echo "Test stage" - ./gradlew test -i -Dorg.gradle.jvmargs="-Djdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL"
该参数将TLS 1.0从默认禁用算法列表中移除,允许Java 11客户端使用TLS 1.0和SQL Server建立连接。
内容的提问来源于stack exchange,提问作者Tasari
相关产品推荐
相关产品推荐

