SSL证书这事儿,我刚上手的时候觉得不就买个证装上嘛,结果连栽三个跟头。第一次买了个OV证书,花了好几百,后来发现小破站根本用不上,纯属浪费钱。第二次配完,Chrome直接给我个大红叉,查半天才发现是域名和证书没对上。第三次更绝,续期定时器不知道啥时候停了,证书过期整整三天我才发现。
(开篇配图:一张浏览器地址栏显示小锁+“安全”的截图,突出最终效果)
先来看选证书这事儿。市面上就那么几种:DV、OV、EV。我一开始搞错了,傻乎乎花几百块买了OV,结果对我这博客来说,除了贵没任何卵用。DV就够用了,免费的Let’s Encrypt真香。
DV就是验证你是不是域名主人,几分钟搞定,免费的大把。OV得验证公司身份,适合正经官网或者电商,贵点但能让用户看到公司名。EV最高级,浏览器直接显示公司名加绿背景,银行支付平台才用得上。个人博客选DV够够的,别学我交那个学费。
接着是配置。手动上传CSR?那是2010年的玩法了。现在都用certbot,Let’s Encrypt官方出的家伙事儿。以Ubuntu为例:
“bash`
sudo apt update
sudo apt install certbot python3-certbot-nginx
然后一键申请:
`bash`
sudo certbot --nginx -d example.com -d www.example.com
这个命令自动验证域名所有权、生成证书、改Nginx配置。第一次跑会让你输个邮箱收续期提醒,别的不用管。官方文档写得跟天书似的,其实核心就这两步。
对了,虽然certbot帮你配了Nginx,我建议还是自己动手调一下。它自动配的有时不够优雅,比如HTTPS重写可能写得不对。我用的这个模板,调了三年才找到的:
`nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/example.com;
index index.html;
}
}
`
还有个巨坑:自动续期。Let's Encrypt证书只有90天有效期,这个设计有待改进,但免费就得忍着。certbot默认带了个定时器,得检查它是不是在跑:
`bash`
sudo systemctl status certbot.timer
状态要是active (running)就正常。我之前遇到过服务器跑久了,这个定时器卡死了,原因是日志文件太大。我找了半天才找到解决方案,加一行日志轮转就行:
`bash
在/etc/logrotate.d/certbot里加入
/var/log/letsencrypt/*.log {
daily
rotate 7
compress
missingok
notifempty
}
`
顺手说个技巧:如果你有多个子域名比如api.example.com、admin.example.com,别一个个去申请,太累。用通配符证书一劳永逸:
`bash`
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com
注意这里必须用DNS验证,通配符域名不支持HTTP验证。部署后用openssl命令查查证书对不对:
`bash`
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -dates -issuer
你会看到证书过期时间。我见过有人配错导致证书过期还在跑,浏览器报大红叉,那场面尴尬极了。
基础配完还能优化性能。从HTTP/1.1升级到HTTP/2之后,页面加载速度肉眼可见地提升了,从慢悠悠变成嗖的一下。具体数字我忘了,但体感变化巨大。配置也简单,在listen指令后加个http2就行。另外有个小东西叫OCSP Stapling,能避免浏览器自己去查证书状态,减少握手时间:
`nginx
server {
listen 443 ssl http2;
# ... 其他配置 ...
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
}
“
加完这些后用SSL Labs测一下,成绩能从B直接蹦到A+。我第一次测是B,加完后直接A+,那种舒爽的感觉绝了!
(核心配图:SSL Labs测试结果截图,显示A+评分,突出性能优化效果)
遇到问题怎么办?常见的错我基本都踩过:
免费方案的话,除了Let’s Encrypt,还有ZeroSSL和Cloudflare的SSL。我真心推荐Let’s Encrypt,生态最成熟,社区最活跃,自动化程度也最高,用着省心。
(总结前配图:一张表格对比Let’s Encrypt、ZeroSSL、Cloudflare的费用、有效期、自动化支持程度)
总之折腾下来,感觉SSL证书这事儿核心就是选对类型、配好自动续期。其他的优化锦上添花。希望你别像我一样踩那么多坑。证书部署完记得用SSL Labs测个评分,免费的不用注册。看到A+就踏实了,不然八成配置还有问题。别像我第一次拿个B还自我感觉良好,最后发现是个低级错误。
*本文仅供参考,不构成医疗建议。*
*本文由AI辅助创作,仅供参考。*