在 Debian 上使用 Nginx 配置 SSL 兼容旧版客户端(如老旧 Android、旧浏览器、旧程序),核心思路是 在不牺牲安全性的前提下,适当放宽 TLS 协议和加密套件。下面按“推荐做法 → 具体配置 → 注意事项”来说明。
✅ 优先使用 TLS 1.2(必须)
⚠️ 仅在必要时才兼容 TLS 1.1 / 1.0
✅ 使用兼容性强的加密套件(Cipher Suite)
✅ HTTP/2 不兼容 TLS ≤ 1.1
✅ 避免强制 HSTS(如果还要兼容很老的客户端)
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 协议:兼容旧版
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# 加密套件(兼容旧客户端)
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-RSA-AES128-SHA256:
ECDHE-RSA-AES128-SHA:
ECDHE-RSA-AES256-SHA:
AES128-GCM-SHA256:
AES256-SHA:
AES128-SHA';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 不强制 HSTS
# add_header Strict-Transport-Security "max-age=31536000" always;
}
✅ 该配置已兼容:
必须:
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
Java 7 不支持:
建议:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA';
⚠️ 安全性会下降,尽量避免长期这样用。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128-SHA:AES256-SHA:RC4-SHA';
⚠️ RC4 已被认为不安全,仅用于测试或极端兼容场景。
openssl version
| Debian 版本 | OpenSSL |
|---|---|
| Debian 10 | 1.1.1 |
| Debian 11 | 1.1.1 |
| Debian 12 | 3.x |
✅ TLS 1.0 / 1.1 在 OpenSSL 3.x 中默认被禁用
如果必须使用 TLS 1.0 / 1.1:
update-crypto-policies --set LEGACY
或:
export OPENSSL_CONF=/etc/ssl/openssl_legacy.cnf
⚠️ 不推荐生产环境这么做。
openssl s_client -connect example.com:443 -tls1
openssl s_client -connect example.com:443 -tls1_1
openssl s_client -connect example.com:443 -tls1_2
| 场景 | 建议 |
|---|---|
| 对外网站 | TLS 1.2 + 1.3 |
| 企业内网 | 可放宽 |
| 金融 / 政务 | 不要兼容 TLS ≤ 1.1 |
| 老设备 | 单独域名 / 反代 |
✅ 精确判断 你当前 Debian + Nginx 版本
✅ 根据 具体客户端(如 Android 4 / Java 6 / 某旧 SDK) 给出最小兼容配置
✅ 帮你把 安全等级从 A → A- / B 控制在可接受范围
你可以直接贴:
nginx -Vopenssl version