我有一台 Debian Buster 服务器,除非我使用命令强制建立 TLS 1.2 连接,否则无法与多台服务器建立 HTTPS/SSL 连接openssl s_client -tls1_2
。
来自各个客户端的错误如下:
- openssl s_client-“SSL 握手已读取 0 个字节”
- wget — “GnuTLS:TLS 连接未正确终止。”
- curl-“OpenSSL SSL_connect:SSL_ERROR_SYSCALL”
- dotnet nuget restore - “从传输流中收到意外的 EOF 或 0 字节。”
openssl.cnf 已经MinProtocol = TLSv1.2
默认了。
受影响的服务器包括:
- api.nuget.org
- packages.microsoft.com
- production.cloudflare.docker.com
连接到这些域时,如何强制我的服务器使用 TLS 1.2?
答案1
对于使用 OpenSSL 的应用程序,您可以将 MinProtocol 和 MaxProtocol 版本设置为 TLSv1.2,以强制所有连接使用 TLSv1.2。我不知道如何针对每个域进行设置。这是不可取的,因为某些服务器仅支持 TLSv1.3,因此与它们的连接将失败。
- 打开 openssl.cnf:
vi /etc/ssl/openssl.cnf
- 滚动到底部:Shift-G
- 插入新行:Shift-O
- 添加
MaxProtocol = TLSv1.2
对于使用 GnuTLS 的应用程序(例如 apt),您可以在系统范围的 GnuTLS 配置文件(可能是 /etc/gnutls/config)中禁用其他版本的 TLS:
[overrides]
disabled-version = tls1.0
disabled-version = tls1.1
disabled-version = tls1.3
看禁用算法和协议。