解决-TLS1.3导致依赖下载失败终极办法
# 一、问题现象 构建失败
在 Kylin V10 系统下编译 Ambari 时,执行 Bower 拉取依赖时出现报错:
bower underscore#1.7.0 cached https://github.com/jashkenas/underscore.git#1.7.0
bower underscore#1.7.0 validate 1.7.0 against https://github.com/jashkenas/underscore.git#1.7.0
bower sinon#1.10.3 cached https://github.com/cjohansen/Sinon.JS.git#1.10.3
bower sinon#1.10.3 validate 1.10.3 against https://github.com/cjohansen/Sinon.JS.git#1.10.3
bower angular-translate#* cached https://github.com/PascalPrecht/bower-angular-translate.git#2.19.1
bower angular-translate#* validate 2.19.1 against https://github.com/PascalPrecht/bower-angular-translate.git#*
bower lodash#>=1.3.0 <2.5.0 cached https://github.com/lodash/lodash.git#2.4.2
bower lodash#>=1.3.0 <2.5.0 validate 2.4.2 against https://github.com/lodash/lodash.git#>=1.3.0 <2.5.0
bower jquery#1.9.1 - 3 not-cached https://github.com/jquery/jquery-dist.git#1.9.1 - 3
bower jquery#1.9.1 - 3 resolve https://github.com/jquery/jquery-dist.git#1.9.1 - 3
bower jquery#1.9.1 - 3 ECMDERR Failed to execute "git ls-remote --tags --heads https://github.com/jquery/jquery-dist.git", exit code of #128 fatal: unable to access
'https://github.com/jquery/jquery-dist.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
Additional error details:
fatal: unable to access 'https://github.com/jquery/jquery-dist.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Ambari Main 3.0.0.0.0:
[INFO]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
对应的 Maven 控制台输出:

影响范围
- git clone / bower install 拉取部分依赖失败;
- curl 下载某些依赖(如 phantomjs)中断;
- 报错集中在
SSL_ERROR_SYSCALL。
# 二、原因分析 TLS1.3兼容性
在 Kylin V10 / RHEL8 系统中,OpenSSL 默认启用了 TLS1.3。 但部分外部依赖仓库(尤其是老旧 Git 仓库或二进制下载站点),对 TLS1.3 握手过程支持不完整,导致连接中断。

排查线索
- 使用
git ls-remote可复现该问题; - 使用
curl -vI可观察到 TLS1.3/ALPN 阶段卡死; - 切换为 TLS1.2 后下载恢复正常。
# 三、尝试过的方案 失败案例
我们曾经尝试通过 git config 针对 github.com 强制使用 HTTP/1.1:
git config --global http.https://github.com/.version HTTP/1.1
1
局限性
该方法只对 git 协议 有效。 对于 curl / phantomjs / npm 等依赖下载,仍会失败,无法彻底解决。
# 四、根治方案 —— 系统全局强制 TLS1.2 推荐
为避免逐个依赖单独处理,可以在 系统层面禁用 TLS1.3,统一强制使用 TLS1.2。 以下脚本适用于 Kylin V10 / RHEL8,支持幂等执行。
#!/usr/bin/env bash
# 强制 OpenSSL 全局使用 TLS1.2 (禁用 TLS1.3),幂等脚本
# 适配 Kylin V10 / RHEL8 系环境
set -euo pipefail
CONF_FILE="/etc/pki/tls/openssl.cnf"
BACKUP_FILE="${CONF_FILE}.bak.$(date +%F-%H%M)"
# 检查配置文件是否存在
if [[ ! -f "$CONF_FILE" ]]; then
echo "❌ 未找到 $CONF_FILE,退出。"
exit 1
fi
# 如果已经有 openssl_conf = default_conf,就认为已经改过
if grep -q '^openssl_conf *= *default_conf' "$CONF_FILE"; then
echo "✅ 已经配置过 openssl_conf,不需要重复修改。"
else
echo "🔧 备份原文件到 $BACKUP_FILE"
cp -av "$CONF_FILE" "$BACKUP_FILE"
echo "🔧 追加 TLS1.2 配置到 $CONF_FILE"
cat <<'EOF' | cat - "$CONF_FILE" > "${CONF_FILE}.new" && mv "${CONF_FILE}.new" "$CONF_FILE"
openssl_conf = default_conf
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.2
MaxProtocol = TLSv1.2
EOF
echo "✅ 配置已写入。"
fi
# 验证 openssl 是否加载 TLS1.2
echo "🔍 验证 OpenSSL 协议版本..."
openssl s_client -connect pypi.org:443 -servername pypi.org </dev/null 2>&1 | grep Protocol || true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Make sure to add code blocks to your code group
下面可以看到生效结果

# 五、验证步骤 必须执行
验证 OpenSSL 协议版本:
openssl s_client -connect github.com:443 </dev/null 2>&1 | grep Protocol1预期输出:
Protocol : TLSv1.21再次执行
bower install或mvn clean package,依赖应能正常下载。
# 六、方案对比与结论
| 方案 | 适用范围 | 优点 | 缺点 |
|---|---|---|---|
| git config 降级 HTTP/1.1 | 仅 git | 简单、快速 | 无法覆盖 curl/npm |
| 系统全局 TLS1.2 | 全局 | 一次解决、覆盖所有工具链 | 需修改系统配置文件 |
最终结论: 全局禁用 TLS1.3,强制 TLS1.2,是在 Kylin V10 环境下编译 Ambari 的最优解,能够彻底解决依赖下载失败问题。
- 01
- Ambari开启Kerberos认证加密类型错误 Kylin V1011-05
- 02
- KERBEROS SERVICE CHECK 报错11-04