BLUF:有人可以帮我设置 yum 和/或 dnf 在连接到 https 站点时首选 TLS 1.3 吗?
情况:
- 全新安装 CentOS Stream 9 (CentOS-Stream-9-20220718.0-x86_64-dvd1.iso)
- 在具有透明代理服务的公司网络上
- 当存储库设置为默认 yum 和 dnf 时,无法下载并出现以下错误:
错误:无法从存储库“baseos”下载元数据:无法准备内部镜像列表:Curl 错误 (35):SSL 连接错误 https://mirrors.centos.org/metalink?repo=centos-baseos-9-stream&arch=x86_64&protocol=https,http [错误:0A000152:SSL 例程::禁用不安全的旧版重新协商]
- 对于使用 https 连接的其他存储库,我遇到了相同的错误
- 一旦 centos.repo 被修改为指向 http 而不是 https,下载就可以工作了
- 其他仅支持 https 的存储库(即https://download.docker.com)仍然不起作用
- 卷曲https://google.com与任何最新的 https 站点都会导致相同的错误
- 卷曲--tlsv1.3https://google.com结果与服务器的正确输出。
我想我已将此问题追溯到 TLS 1.3 客户端支持,可能是由于我们公司代理拒绝 TLS 1.2 密码。我不知道如何告诉 yum、dnf 或任何其他客户端命令使用 TLS 1.3 来协商连接。我在 CentOS 7 和 8 上发现了类似的问题,但没有找到在 9 中如何解决的问题。在 7 和 8 中,openssl 似乎缺少 TLS 1.3 的密码,但在 9 上 openssl 已更新并具有 1.3 支持。
答案1
将tlsv1.3
选项添加到~/.curlrc
.您可以在以下位置找到其他受支持的配置文件位置卷曲手册。
在我的例子中,强制 TLS 1.3 禁用了 TLS 检查,但它不适用于旧服务器。另一种选择是通过在以下位置设置 UnsafeLegacyRenegotiation 选项来允许不安全的遗留重新协商/etc/pki/tls/openssl.cnf
:
…
[ crypto_policy ]
Options = UnsafeLegacyRenegotiation
.include = /etc/crypto-policies/back-ends/opensslcnf.config
…
您还可以在 openssl.cnf 中设置支持的最低 TLS 版本,但它似乎被curl 忽略:
MinProtocol = TLSv1.3
TLS.MinProtocol = TLSv1.3