文档中心
Nginx閰嶇疆SSL璇佷功鍏ㄦ敾鐣ヨ浣犵殑缃戠珯鍛婂埆涓嶅畨鍏ㄨ鍛?txt
时间 : 2025-09-27 16:27:43浏览量 : 3

SSL证书是网站安全的"身份证",它能加密用户与服务器之间的通信,防止数据被窃取或篡改。本文将以Nginx为例,手把手教你如何正确配置SSL证书,让你的网站从"不安全"变成一把绿色小锁。
一、为什么你的网站需要SSL证书?
想象一下:你在咖啡店用公共WiFi登录网银,如果没有SSL加密,黑客可以像看报纸一样轻松看到你的账号密码!SSL证书通过HTTPS协议实现了三大保护:
1. 加密传输:就像给你的数据装上保险箱,即使被截获也无法读取
2. 身份认证:证明你访问的是真正的银行网站而非钓鱼网站
3. 数据完整性:确保传输过程中数据没有被篡改
Google从2025年起就将HTTPS作为搜索排名因素,Chrome浏览器也会对非HTTPS网站显示"不安全"警告。我的客户王总就曾因此损失了30%的订单量——谁会在一个被标记为"不安全"的网站上输入信用卡信息呢?
二、获取SSL证书的三种途径
1. 商业CA机构(推荐企业使用)
- 代表:DigiCert、GlobalSign、Symantec
- 价格:每年几百到上万元不等
- 特点:最高级别的信任度,适合金融、电商等场景
2. 免费CA机构(个人/小企业首选)
- Let's Encrypt(90天有效期,可自动续期)
- 阿里云/腾讯云提供的免费证书
- 示例申请命令:
```bash
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
```
3. 自签名证书(仅测试环境使用)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt
??警告:自签名证书会触发浏览器警告,绝不要在生产环境使用!
三、Nginx配置SSL证书详细步骤
假设你已经获得了以下两个文件:
- `example.com.crt`(证书文件)
- `example.com.key`(私钥文件)
Step1: 上传证书文件
最佳实践是将它们放在专门的目录:
sudo mkdir -p /etc/nginx/ssl/
sudo cp example.com.crt example.com.key /etc/nginx/ssl/
sudo chmod 600 /etc/nginx/ssl/*
关键!限制文件权限
Step2: 修改Nginx配置文件
打开你的站点配置文件(通常在`/etc/nginx/sites-available/`):
```nginx
server {
listen 443 ssl http2;
HTTP/2能提升性能
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
TLS协议优化配置
ssl_protocols TLSv1.2 TLSv1.3;
禁用不安全的TLS1.0/1.1
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
HSTS头(强制HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
...其他原有配置...
}
HTTP强制跳转HTTPS(重要!)
listen 80;
return 301 https://$host$request_uri;
Step3: SSL性能优化技巧
我曾在某电商平台优化中使TLS握手时间从800ms降到200ms:
1. 启用OCSP Stapling:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
2. 会话复用减少握手:
```nginx
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
3. Diffie-Hellman参数强化:
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
生成需要较长时间!
然后在配置中添加:
ssl_dhparam /etc/nginx/dhparam.pem;
四、常见问题排错指南
?问题1:"NET::ERR_CERT_AUTHORITY_INVALID"
可能原因:
- CA根证书未正确安装(需追加中间证书)
解决方法:
```bash
cat intermediate.crt >> example.com.crt
?问题2:"SSL handshake failed"
检查Nginx错误日志:
tail -f /var/log/nginx/error.log
常见修复方案:
sudo openssl verify -CAfile ca-bundle.crt your-cert.crt
?问题3:Chrome提示"此页面包含非安全内容"
这是典型的混合内容问题(Https页面加载Http资源),需要:
1. F12打开开发者工具 → Security面板查看具体资源URL
2. WordPress用户可在wp-config.php添加:
```php
define('FORCE_SSL_ADMIN', true);
$_SERVER['HTTPS'] = 'on';
五、高级安全加固方案
对于金融级安全要求,建议追加以下配置:
A+级SSL Labs评分配置模板:
SSL加速硬件设置(如果有)
ssl_engine builtin;
TLSv1.3优先且禁用已知弱密码套件
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+AESGCM';
HPKP公钥固定(谨慎使用)
add_header Public-Key-Pins 'pin-sha256="base64+primary=="; pin-sha256="base64+backup=="; max-age=2592000';
CSP内容安全策略头
add_header Content-Security-Policy "default-src 'self'";
六、自动化维护方案
手动更新Let's Encrypt太麻烦?试试自动化:
1.Crontab自动续期:
0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot renew --quiet --deploy-hook "systemctl reload nginx"
2.Docker容器方案:
```dockerfile
FROM nginx:alpine
RUN apk add --no-cache certbot certbot-nginx && \
mkdir -p /etc/certs/live/mydomain.com
CMD ["sh", "-c", "certbot install --cert-name mydomain.com || true && nginx"]
通过以上步骤,你的Nginx服务器就能提供安全的HTTPS服务了。记得定期检查Qualys SSL Labs测试结果(https://www.ssllabs.com),保持A+评级。如果遇到任何技术难题,欢迎在评论区留言讨论!
TAG:nginx 的conf 中添加ssl证书,nginx sslv3,nginx ssl pem,nginx安装ssl证书,nginx ssl_ciphers