文档中心
Nginx閰嶇疆SSL閫氶厤璇佷功瀹屾暣鎸囧崡涓€娆¤В鍐虫墍鏈夊瓙鍩熷悕HTTPS鍔犲瘑闂
时间 : 2025-09-27 16:27:51浏览量 : 3
什么是SSL通配证书?

想象一下你管理着公司网站,主域名是example.com,但还有shop.example.com、blog.example.com、api.example.com等多个子域名。如果每个子域名都要单独购买和配置SSL证书,不仅成本高,管理起来也麻烦。这时候SSL通配证书(Wildcard SSL Certificate)就像一把"万能钥匙",它可以用一张证书保护*.example.com下的所有子域名。
举个例子:就像小区门禁卡可以刷开所有单元楼的门,而不用为每个单元单独配钥匙。
为什么需要通配证书?
1. 成本效益:通常比购买多个单域名证书更便宜
2. 管理简便:只需维护一张证书
3. 扩展灵活:新增子域名无需重新申请证书
4. 安全统一:确保所有子域名的加密标准一致
实际案例:某电商平台有10个子域名系统(支付、会员、商品等),使用通配证书后:
- 年度证书费用从$2000降至$300
- 配置时间从8小时缩短到30分钟
- 新上线促销子域时可立即启用HTTPS
获取SSL通配证书的三种途径
1. 商业CA购买(推荐生产环境使用)
知名机构如DigiCert、Sectigo提供的通配证书:
- 价格范围:$200-$1000/年
- 特点:浏览器100%信任,提供保险保障
- 适合场景:企业官网、电商平台
2. Let's Encrypt免费申请(适合测试环境)
通过Certbot工具获取:
```bash
sudo certbot certonly --manual --preferred-challenges=dns -d *.example.com
```
注意点:
- 每90天需要续期
- 需要验证DNS TXT记录
- 不支持OV/EV级别验证
3. OpenSSL自签名(开发环境专用)
生成自签名通配证书命令:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 \
-nodes -keyout example.key -out example.crt \
-subj "/CN=*.example.com" \
-addext "subjectAltName=DNS:*.example.com"
Nginx配置全流程详解(以Let's Encrypt为例)
Step1: DNS解析准备
在DNS服务商处添加两条记录:
类型 名称 值
A @ 服务器IP
CNAME * example.com.
Step2: Certbot申请证书
执行命令时会有DNS验证环节:
sudo certbot certonly --manual --preferred-challenges=dns \
-d example.com -d *.example.com
系统会提示添加类似这样的TXT记录:
_acme-challenge.example.com. TXT "gfj9Xq...Rg85nM"
Step3: Nginx配置文件修改
典型配置示例(/etc/nginx/sites-available/default):
```nginx
server {
listen 443 ssl;
server_name ~^(?
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
TLS优化参数(专业建议)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
HSTS安全增强(谨慎开启)
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
proxy_pass http://backend_$subdomain;
...其他代理设置...
}
}
关键参数说明:
1. `server_name`使用正则表达式匹配任意子域名
2. `proxy_pass`利用捕获的subdomain变量动态路由
3. `ssl_session_cache`提升HTTPS性能
Step4: HTTP自动跳转HTTPS
在80端口配置中添加跳转规则:
```nginx
listen 80;
server_name *.example.com;
ACME验证路径保留(供续期使用)
location ^~ /.well-known/acme-challenge/ {
root /var/www/html;
try_files $uri =404;
}
location / {
return 301 https://$host$request_uri;
SSL配置的进阶技巧与排错指南
OCSP装订提升性能
在Nginx中添加以下配置减少客户端验证延迟:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.pem;
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
HTTPS安全评分优化建议
用SSL Labs测试后常见的改进点:
1. 密钥强度不足
```bash
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
```
2. 缺少中间证书
cat example.crt intermediate.crt > chained.crt
3. 过时的TLS协议
```nginx
Wrong ?
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Right ?
ssl_protocols TLSv1.2 TLSv1.3;
CDN场景的特殊处理
当使用Cloudflare等CDN时:
Cloudflare真实IP识别设置
set_real_ip_from xxx.yyy.ccc.ddd;
real_ip_header CF-Connecting-IP;
SSL卸载配置调整
ssl_certificate cloudflare-origin.pem;
ssl_certificate_key origin-private.key;
FAQ常见问题解答
Q:为什么Chrome显示"无效的证书链"?
A:典型原因包括中间证书缺失或顺序错误。检查命令:
```bash
openssl verify -CAfile chain.crt domain.crt
Q:如何查看通配证书记录的所有SAN?
A:使用这个命令解码信息:
openssl x509 -in certificate.crt -text | grep DNS
Q:新加的子域名无法访问怎么办?
A:按这个检查清单排查:
1?? DNS解析是否生效(nslookup test.example.com)
2?? Nginx是否reload最新配置(sudo nginx -t && sudo systemctl reload nginx)
通过本文的详细指导,你应该已经掌握了Nginx下SSL通配证的全套配置方法。记住定期检查证到期时间并设置自动续期任务,这样才能确保持续的安全防护。
TAG:nginx配置ssl通配证书,