文档中心
Nginx閰嶇疆SSL鍏嶈垂璇佷功鍏ㄦ敾鐣etsEncrypt瀹炴垬鎸囧崡
时间 : 2025-09-27 16:27:33浏览量 : 2
为什么网站需要SSL证书?

想象一下,你在咖啡馆用公共WiFi登录银行账户。如果没有SSL加密,你的账号密码就像写在明信片上邮寄一样危险!SSL证书(现在更准确的说法是TLS证书)就像给你的网站数据装上了防弹玻璃,让黑客无法窥探或篡改传输中的信息。
2025年起,Google Chrome就将没有SSL证书的网站标记为"不安全",这直接影响了用户体验和SEO排名。根据Mozilla统计,截至2025年,全球HTTPS流量已超过90%。好消息是,现在我们可以完全免费获取企业级SSL证书!
免费SSL证书哪家强?
目前最流行的免费证书颁发机构是Let's Encrypt,它由Linux基金会支持,提供:
- 完全免费的DV(域名验证)证书
- 90天有效期(可自动续期)
- 支持通配符证书(*.yourdomain.com)
- 被所有主流浏览器信任
其他选择还有:
1. Cloudflare提供的边缘证书(适合使用其CDN的用户)
2. ZeroSSL(提供网页版管理界面)
3. Buypass Go SSL(欧洲的替代方案)
但Let's Encrypt因其自动化工具Certbot的易用性成为首选。下面我就以它为例展示完整配置流程。
实战:为Nginx配置Let's Encrypt证书
环境准备
假设我们有一台运行Ubuntu 20.04的服务器,已安装Nginx并开放了80/443端口。域名example.com已解析到服务器IP。
步骤1:安装Certbot工具
```bash
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
```
这个python3-certbot-nginx包特别重要,它包含了Nginx专用的插件。
步骤2:获取并安装证书
单命令搞定:
sudo certbot --nginx -d example.com -d www.example.com
执行后会交互式询问:
1. 邮箱地址(用于紧急通知)
2. 是否同意服务条款
3. 是否订阅电子报(建议选No)
成功后你会看到类似输出:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Certbot会自动修改你的Nginx配置添加HTTPS支持!
步骤3:验证自动续期
Let's Encrypt证书只有90天有效期,但Certbot已自动配置了续期任务:
sudo certbot renew --dry-run
如果看到"The simulated renewal of example.com was successful"说明一切正常。
实际续期任务通过cron定时执行:
sudo cat /etc/cron.d/certbot
你会看到类似内容:
0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew
Nginx SSL配置优化指南
虽然Certbot已经帮我们生成了基础配置,但专业的安全加固还需要手动调整:
1. TLS协议版本控制
在Nginx配置的ssl_protocols部分禁用不安全的旧协议:
```nginx
ssl_protocols TLSv1.2 TLSv1.3;
禁用TLSv1.0和TLSv1.1
2. 加密套件优化
使用Mozilla推荐的现代加密套件:
```nginx
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers on;
3. HSTS头强化安全
强制浏览器始终使用HTTPS:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
4. OCSP装订提升性能
减少客户端验证时间:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
完整优化后的server块示例:https://gist.github.com/security-example/xxxxxx
HTTPS常见问题排雷指南
Q:为什么我的网站显示"不安全"锁标志?
A:可能原因有:
- CSS/JS等资源仍通过HTTP加载 → Chrome会认为页面"混合内容"
- CDN未正确配置HTTPS → Cloudflare需要开启Full SSL模式
Q:如何测试我的SSL配置安全性?
推荐使用以下在线工具检测:
1. SSL Labs测试(https://www.ssllabs.com/ssltest/)
2. ImmuniWeb测试(https://www.immuniweb.com/ssl/)
3.Hardenize全面检测(https://www.hardenize.com/)
Q:通配符证书怎么申请?
在certbot命令添加通配符参数即可:
```bash
sudo certbot certonly --manual --preferred-challenges=dns \
-d *.example.com -d example.com
注意需要手动添加DNS TXT记录验证域名所有权。
HTTP到HTTPS最佳实践迁移方案
对于已有流量的网站建议分阶段迁移:
阶段一:并行运行
保持HTTP可用,同时部署HTTPS。修改Nginx配置使两者共存。
阶段二:301重定向
确认HTTPS工作正常后,在Nginx中添加永久跳转:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
阶段三:HSTS预加载
当确定不再需要HTTP回退时,提交域名到HSTS预加载列表(https://hstspreload.org/)
SSL性能优化技巧
担心HTTPS影响网站速度?试试这些方法:
1.会话恢复减少TLS握手开销:
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:50m;
2.启用TLSv1.3比TLSv1.2快50%以上!
3.使用Brotli压缩替代gzip能进一步减小传输体积。
4.合理设置缓存头让浏览器缓存静态资源。
实测表明经过优化的HTTPS站点比HTTP更快——得益于HTTP/2的多路复用特性!
Let's Encrypt高级玩法
对于企业级需求还可以:
? 多域名SAN证书: `certbot -d a.example.com -d b.example.net`
? 自动DNS验证:适合API-only服务器,需云厂商API密钥配合脚本自动化.
? 容器化部署:官方提供Docker镜像方便K8s环境集成.
? 监控告警:通过Prometheus监控证书过期时间,对接Alertmanager.
HTTPS新时代的最佳选择
随着Let's Encrypt的成熟,付费DV证书已经失去存在价值。笔者管理的50+生产站点全部采用免费方案,每年节省数万元开支。更重要的是自动化运维带来的便利性——再也不用担心忘记续费导致服务中断!
立即为你的Nginx部署SSL吧,不仅为了安全合规,更是对访客的基本尊重。互联网的未来属于HTTPS Everywhere!
TAG:nginx ssl 免费证书,nginx安装ssl证书,nginx的ssl证书,nginx证书申请,nginx ssl_ciphers,linux nginx ssl证书