ssl新闻资讯

文档中心

Nginx澶氫釜SSL璇佷功瀹夎澶辫触鐨?澶у師鍥犲強瑙e喅鏂规(闄勭湡瀹炴渚?

时间 : 2025-09-27 16:26:40浏览量 : 3

2Nginx澶氫釜SSL璇佷功瀹夎澶辫触鐨?澶у師鍥犲強瑙e喅鏂规(闄勭湡瀹炴渚?

作为一名网络安全工程师,我经常遇到客户在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后无法访问