Nginx证书问题致站点无法访问(poste.io环境)求助
解决Nginx 1.18.0 SSL握手错误:ERR_SSL_VERSION_OR_CIPHER_MISMATCH/SSL_ERROR_NO_CYPHER_OVERLAP
核心问题
- 证书链不完整:你使用Let's Encrypt的
chain.pem作为Nginx的server.crt,但该文件仅包含中间证书,缺少服务器自身的证书,导致SSL握手时无法完成完整的证书链验证,进而触发签名算法协商失败。 - Cipher配置与Nginx版本不兼容:当前的SSL cipher列表在Nginx 1.18.0上存在协商障碍,尤其是在证书链不完整的情况下,客户端与服务器无法找到共同支持的算法。
修复步骤
1. 修正证书路径
将HTTPS server块中的ssl_certificate指向Let's Encrypt提供的fullchain.pem(该文件包含服务器证书+完整中间证书链):
ssl_certificate /etc/ssl/fullchain.pem; # 替换原有的/etc/ssl/server.crt(对应chain.pem) ssl_certificate_key /etc/ssl/server.key; # 保持不变,对应privkey.pem
2. 调整SSL Cipher配置
更新ssl.conf中的cipher设置,适配Nginx 1.18.0的算法支持:
ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384";
3. 验证并重启Nginx
- 检查配置语法是否正确:
nginx -t
- 重启Nginx服务:
systemctl restart nginx
补充说明
- 相同证书在Istio中正常工作,是因为Istio会自动处理完整证书链,而Nginx需要显式指定
fullchain.pem才能完成正确的链验证。 - 日志中的
no suitable signature algorithm错误,根源是证书链不完整导致服务器无法向客户端提供有效的签名算法选项,修正证书链后该问题会优先解决。
内容的提问来源于stack exchange,提问作者WestFarmer
相关产品推荐
相关产品推荐

