在 Debian 上遇到 OpenSSL 握手失败(handshake failure) 的原因很多,下面按最常见原因 → 排查方法 → 解决思路给你一个系统性的说明。
Debian(尤其是较新版本)默认 禁用老旧协议:
如果对方服务器只支持老协议,就会握手失败。
典型报错
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
SSL_ERROR_SSL
排查
openssl s_client -connect host:port -tls1
openssl s_client -connect host:port -tls1_1
openssl s_client -connect host:port -tls1_2
示例
no shared cipher
排查
openssl ciphers -v
openssl s_client -connect host:port -cipher 'XXX'
包括:
典型报错
verify error:num=20:unable to get local issuer certificate
verify error:num=18:self signed certificate
排查
openssl s_client -connect host:443 -servername host
Debian 11 → 12 后:
例如:
现象
error:0308010C:digital envelope routines::unsupported
临时解决(不推荐生产)
export OPENSSL_CONF=/etc/ssl/openssl.cnf
# 或启用 legacy
某些服务器必须指定域名:
openssl s_client -connect ip:443 -servername domain.com
date
证书“未生效 / 已过期”常常因此被误判。
可能:
# 1. 基础测试
openssl s_client -connect host:port
# 2. 指定协议
openssl s_client -connect host:port -tls1_2
openssl s_client -connect host:port -tls1_3
# 3. 看详细错误
openssl s_client -connect host:port -debug
# 4. 查看证书
openssl s_client -connect host:port -showcerts
让服务器支持 TLS 1.2+
openssl s_client -connect host:port -tls1_1
编辑:
/etc/ssl/openssl.cnf
确保:
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
apt update
apt install --reinstall ca-certificates
你可以贴出:
cat /etc/debian_version)openssl version)我可以直接告诉你是哪一条原因 + 怎么改配置。