ssl新闻资讯

文档中心

Nginx濡備綍鍦ㄥ悓涓€涓绘満涓婇厤缃涓猄SL璇佷功锛熷疄鎴樻寚鍗楁潵浜嗭紒

时间 : 2025-09-27 16:26:43浏览量 : 2

2Nginx濡備綍鍦ㄥ悓涓€涓绘満涓婇厤缃涓猄SL璇佷功锛熷疄鎴樻寚鍗楁潵浜嗭紒

作为一名网络安全从业者,我经常遇到需要在同一台服务器上托管多个HTTPS网站的需求。今天就以Nginx为例,手把手教你如何实现这个功能,让你的网站既安全又专业!

为什么需要多个SSL证书?

想象一下你经营着一家网络公司,同时运营着三个网站:

- 主站 `example.com`

- 博客 `blog.example.com`

- 电商平台 `shop.example.com`

按照最佳安全实践,每个独立的域名/子域名都应该有自己的SSL证书。这就好比给公司的不同部门配不同的门禁卡,而不是所有部门共用一把钥匙。

SNI技术:多证书的关键

传统HTTPS有个限制:在TCP握手阶段(建立连接的最初阶段),浏览器还没告诉服务器它要访问哪个域名,服务器就必须先提供证书。这就导致一台服务器只能用一个证书。

解决方案是SNI(Server Name Indication),它就像快递员送货前先问"请问是张先生家吗?",然后再把包裹递进去。SNI允许客户端在TLS握手时告诉服务器它要访问的域名,服务器就能返回对应的证书。

> 真实案例:2025年以前,很多老旧Android设备不支持SNI,导致无法正确加载使用多证书的网站。这也是为什么一些企业仍需维护单独的IP来服务老旧客户端。

Nginx多证书配置实战

基础配置示例

假设我们有两个域名:

1. `example.com` - 主站点

2. `api.example.com` - API服务

```nginx

server {

listen 443 ssl;

server_name example.com;

ssl_certificate /path/to/example.com.crt;

ssl_certificate_key /path/to/example.com.key;

其他配置...

}

server_name api.example.com;

ssl_certificate /path/to/api.example.com.crt;

ssl_certificate_key /path/to/api.example.com.key;

```

进阶技巧:通配符证书

如果你有多个子域名,比如:

- `blog.example.com`

- `shop.example.com`

- `support.example.com`

可以考虑使用通配符证书(`*.example.com`),这样一张证书就能覆盖所有子域名:

server_name *.example.com;

ssl_certificate /path/to/wildcard.example.com.crt;

ssl_certificate_key /path/to/wildcard.example.com.key;

通过if判断具体子域名

if ($host = "blog.example.com") {

blog专属配置

}

> 安全提醒:通配符证书如果私钥泄露,所有子域名都会受影响。金融等高安全性场景建议还是用独立证书。

HTTPS强制跳转最佳实践

为了防止用户意外访问HTTP版本,应该强制跳转到HTTPS:

listen 80;

server_name example.com api.example.com;

HTTP严格传输安全头(HSTS)

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

return 301 https://$host$request_uri;

常见问题排雷指南

Q1: Chrome报"ERR_SSL_VERSION_OR_CIPHER_MISMATCH"

这通常是因为:

1. Nginx没有正确监听443端口

2. SSL协议版本太旧(比如只支持SSLv3)

解决方案

ssl_protocols TLSv1.2 TLSv1.3;

禁用老旧协议

ssl_prefer_server_ciphers on;

使用服务端推荐的加密套件

Q2: Safari提示"此连接非私密连接"

可能是:

1. 证书链不完整(缺少中间CA证书)

2. 证书与域名不匹配

检查命令

```bash

openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -text

Q3: Android老设备无法访问

对于必须支持Android 4.x等古董设备的场景:

1. 单独分配一个IP给这些设备使用

2. 在该IP上只部署一个默认证书

listen 192.168.1.100:443 ssl default_server;

SNI不支持时的默认回退证书

ssl_certificate /path/to/default.crt;

SSL性能优化小贴士

1. 会话复用:减少TLS握手开销

```nginx

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;

```

2. OCSP Stapling:加速证书状态检查

ssl_stapling on;

ssl_stapling_verify on;

3. 现代加密套件优先

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

HTTPS安全加固清单

完成多证书配置后,记得检查:

? HSTS头是否已设置

? TLS协议是否禁用SSLv3/TLSv1.0

? HTTP/2是否启用

? CSP头部是否合理配置

? HPKP头部是否考虑部署(注意风险)

记住:网络安全就像给大楼装防盗门 - SSL/TLS是第一道防线。多域名的精细化管理能让你的防护更精准有效!

TAG:nginx同个主机多个ssl证书,nginx配置多个server只有一个生效,nginx 多域名ssl认证,nginx配置同一域名访问两个项目,多台nginx