文档中心
NginxSSL璇佷功鎬庝箞鐢熸垚锛熸墜鎶婃墜鏁欎綘鎵撻€犲畨鍏ㄥ姞瀵嗙綉绔?txt
时间 : 2025-09-27 16:26:11浏览量 : 2

在今天的互联网环境中,SSL/TLS证书已经成为网站安全的标配。无论你是个人站长还是企业运维,学会为Nginx配置SSL证书都是必备技能。本文将用最通俗的语言,结合具体操作示例,带你从零开始生成并部署SSL证书到Nginx服务器。
一、SSL证书基础知识扫盲
SSL证书就像网站的"身份证",它有两个核心作用:
1. 加密传输:防止数据在传输过程中被窃听(比如你输入的密码)
2. 身份认证:证明这个网站确实属于声称的机构(防止钓鱼网站)
常见的有三种类型:
- 自签名证书:免费但浏览器会显示警告(适合测试环境)
- Let's Encrypt:免费且受信任(个人网站首选)
- 商业证书:价格几百到上万不等(企业级需求)
> 举例说明:自签名证书就像你自己手写的名片,Let's Encrypt相当于派出所开的证明,而商业证书好比公证处出具的正式文件。
二、实战生成SSL证书的3种方法
方法1:OpenSSL创建自签名证书(测试用)
```bash
1. 生成2048位的私钥
openssl genrsa -out myserver.key 2048
2. 生成证书签名请求(CSR)
openssl req -new -key myserver.key -out myserver.csr
会交互式询问国家、公司名等信息,测试可全部按回车
3. 生成有效期365天的证书
openssl x509 -req -days 365 -in myserver.csr -signkey myserver.key -out myserver.crt
```
生成后你会得到两个关键文件:
- `.key`文件:私钥,相当于保险箱钥匙
- `.crt`文件:公钥证书,相当于保险箱编号牌
方法2:Certbot自动获取Let's Encrypt证书
这是目前最推荐的免费方案,全程自动化:
Ubuntu/Debian系统安装Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
一键获取并配置证书(替换yourdomain.com)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot会自动:
1. 验证域名所有权(通过80端口)
2. 下载证书到`/etc/letsencrypt/live/`
3. 修改Nginx配置启用HTTPS
4. 设置自动续期(解决90天有效期问题)
方法3:商业证书申请流程
以DigiCert为例典型步骤:
1. 在官网购买对应类型的SSL证书
2. 提交CSR文件(同方法1的第二步)
3. 完成域名验证(邮箱/DNS/TXT记录)
4. 下载颁发的`.crt`和`.ca-bundle`文件
三、Nginx配置SSL最佳实践
编辑Nginx配置文件(通常位于`/etc/nginx/sites-enabled/default`):
```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your_domain.crt;
ssl_certificate_key /path/to/your_domain.key;
TLS协议优化配置
ssl_protocols TLSv1.2 TLSv1.3;
禁用不安全的TLSv1.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" always;
...其他常规配置...
}
关键安全配置说明:
- `ssl_protocols`:禁用老旧协议防止降级攻击
- `ssl_ciphers`:指定强加密套件组合
- `HSTS头`:告诉浏览器未来一年都只用HTTPS访问
四、验证与故障排查技巧
部署完成后务必检查:
检查Nginx配置语法
sudo nginx -t
重启Nginx生效
sudo systemctl restart nginx
在线测试SSL配置(替换你的域名)
curl -I https://yourdomain.com
sslscan yourdomain.com
常见问题解决方案:
1. 浏览器显示不安全:
- CA根证书未安装(商业证书需要上传.ca-bundle)
- SNI未启用(一个IP多个域名时需要)
2. ERR_SSL_VERSION_OR_CIPHER_MISMATCH:
```nginx
调整协议支持范围
ssl_protocols TLSv1.2 TLSv1.3;
```
3. Let's Encrypt续期失败:
```bash
手动强制更新
sudo certbot renew --force-renewal
五、高级安全加固建议
对于金融、电商等敏感业务站点建议追加:
1.OCSP Stapling加速:
```nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver8 .8 .8 .8 valid=300s;
2.双证书记录提升性能:
```bash
将常用ECDSA和传统RSA结合使用
opensslecparam-out ecparam.pem-name prime256v1-genkey
openslreq-new-nodes-x509-days365-key ecparam.pem-out ecdsa.crt
3.定期轮换密钥:
```bash
!/bin/bash
mv server.key server.key.bak && openslgenrsa-out server.key4096
systemctl reload nginx
```
通过以上步骤你的Nginx服务器就能获得专业级的HTTPS防护了。记得每隔6个月检查一次加密套件是否过时可以使用[SSL Labs测试工具](https://www.ssllabs.com/ssltest/)进行深度评估。
TAG:nginx ssl证书怎么生成,nginxssl证书配置,nginx ssl pem,nginx ssl_ciphers