文档中心
Nginx澶氫釜SSL璇佷功瀹夎澶辫触鐨?澶у師鍥犲強瑙e喅鏂规(闄勭湡瀹炴渚?
时间 : 2025-09-27 16:26:40浏览量 : 3

作为一名网络安全工程师,我经常遇到客户在Nginx服务器上配置多个SSL证书时出现的各种"翻车"现场。今天就用大白话带大家彻底搞懂这个技术难题,保证你看完就能上手解决!
一、证书文件权限问题(最常见的"低级错误")
真实案例:上周某电商平台运维小哥急吼吼找我,说新装的泛域名证书死活不生效,老报"Permission denied"。我让他`ls -l`一看——好家伙!证书文件权限居然是600(只有root可读),Nginx worker进程当然读不到啦!
专业原理:
Nginx工作进程通常以`www-data`或`nginx`用户运行,必须确保:
- 证书文件(.crt/.pem)至少644权限
- 私钥文件(.key)必须600权限但所属用户要包含Nginx进程用户
```bash
正确姿势示范:
chmod 644 /etc/ssl/example.com.crt
chmod 600 /etc/ssl/example.com.key
chown root:nginx /etc/ssl/example.com.*
```
二、SNI配置缺失(80%多证书问题的元凶)
踩坑实录:某企业官网和CRM系统共用服务器,分别使用www.company.com和crm.company.com的证书。访问CRM时却总是返回主站的证书,这就是典型的SNI(Server Name Indication)没配好!
技术解析:
- SNI是TLS的扩展功能,让服务器知道客户端要访问哪个域名
- 必须在server块中明确指定`server_name`:
```nginx
server {
listen 443 ssl;
server_name www.company.com;
ssl_certificate /path/to/www.crt;
ssl_certificate_key /path/to/www.key;
其他配置...
}
server_name crm.company.com;
ssl_certificate /path/to/crm.crt;
ssl_certificate_key /path/to/crm.key;
三、端口冲突引发的"血案"
典型故障场景:开发小哥给测试环境配了三个服务分别用api.test.com、admin.test.com、static.test.com。结果发现只有第一个配置的证书生效——原来他所有server块都写的`listen 443;`
解决方案:
正确写法1:为每个域名单独监听IP(适合有多个IP的服务器)
listen 192.168.1.10:443;
正确写法2:使用默认监听但区分server_name
listen 443 ssl default_server;
默认证书
listen [::]:443 ssl default_server;
server_name api.test.com;
...
四、证书链不完整(最隐蔽的坑)
血泪教训:某金融客户升级证书后,Android旧机型突然报SSL错误。排查发现他们只上传了域名证书,缺了中间CA证书!
专业建议:
1. 用在线工具检查链完整性:https://www.ssllabs.com/ssltest/
2. 合并命令要按顺序:
```bash
cat domain.crt intermediate.crt root.crt > fullchain.crt
```
3. Nginx配置要指向合并后的文件:
```nginx
ssl_certificate /etc/ssl/fullchain.crt;
五、OpenSSL版本过旧(容易被忽视)
我曾遇到过CentOS7默认OpenSSL1.0不支持TLS1.3的情况。检测方法:
openssl version
nginx -V | grep OpenSSL
升级方案:
Ubuntu示例
apt update && apt install --only-upgrade openssl libssl-dev
CentOS示例
yum update openssl -y
【终极排错指南】
当所有检查都做了还是失败时,按这个顺序排查:
1. 看错误日志
tail -f /var/log/nginx/error.log | grep SSL
2. 测试配置文件
nginx -t
3. 强制重载配置
systemctl restart nginx
4. 网络层验证
```bash
openssl s_client -connect domain.com:443 -servername domain.com | grep "Certificate chain"
5. 防火墙检查
iptables -L -n | grep :443
记住这个口诀:"权限SNI端口链,版本日志逐个验"。按照这个思路处理多SSL证书问题,保你药到病除!
TAG:nginx多个ssl证书安装失败,nginx ssl pem,nginx部署ssl证书,nginx配置ssl后无法访问