用Let’s Encrypt给网站加HTTPS,核心工具是Certbot。这东西是EFF官方维护的客户端,支持Nginx、Apache、独立模式等多种方式。我主要用Nginx,下面按这个场景写。
前提条件
– 服务器装好Nginx,能正常访问
– 域名解析到服务器IP
– 服务器开放80和443端口(Let’s Encrypt验证域名所有权需要80端口)
安装Certbot
不同系统命令不一样。Ubuntu/Debian:
sudo apt update
sudo apt install certbot python3-certbot-nginx
CentOS/RHEL:
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
雨云的服务器镜像一般自带EPEL源,直接装就行,比较省事。
申请证书
Certbot会自动修改Nginx配置,最省事的方式:
sudo certbot --nginx -d example.com -d www.example.com
-d后面跟域名,多个域名就写多个-d。Certbot会检查80端口是否通,确认域名所有权,自动申请证书并配置HTTPS。
如果不想让Certbot改Nginx配置,用独立模式:
sudo certbot certonly --standalone -d example.com -d www.example.com
独立模式需要先停掉Nginx,因为Certbot要占用80端口做验证。验证完证书会生成在/etc/letsencrypt/live/example.com/目录下,自己手动配Nginx。
证书文件结构
申请完看/etc/letsencrypt/live/yourdomain/目录:
– privkey.pem:私钥,别泄露
– fullchain.pem:完整证书链(包含中间证书)
– cert.pem:域名证书(不含中间证书)
– chain.pem:中间证书
Nginx配置里直接引用fullchain.pem和privkey.pem就行。
Nginx手动配置示例
如果用了certonly独立模式,在server块里加上:
server {
listen 443 ssl;
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 / {
proxy_pass http://127.0.0.1:8080;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
80端口做301跳转,强制HTTPS。
自动续期
Let’s Encrypt证书有效期90天,需要定期续签。Certbot自带续签命令:
sudo certbot renew --dry-run
–dry-run是测试,没问题就删掉它正式执行。把这条命令加到crontab里,每天跑一次:
0 3 * * * /usr/bin/certbot renew --quiet
–quiet表示成功时不输出日志,只有失败才报错。每天凌晨3点检查一次,距离过期30天内才会真正续签。
常见问题
1. 申请失败提示”Domain not found”:检查DNS解析,ping一下域名看IP对不对
2. “Too many certificates already issued”:Let’s Encrypt有速率限制,每周每个域名最多50张证书。测试用staging环境:`certbot certonly –staging`
3. 续签报”certbot command not found”:确认certbot安装路径,或者用完整路径`/usr/bin/certbot`
4. 证书申请成功但浏览器提示不安全:检查Nginx配置里证书路径是否正确,或者证书链不完整。fullchain.pem比cert.pem保险
多域名通配符证书
Let’s Encrypt从2018年开始支持通配符证书,但必须用DNS验证方式,不能用HTTP验证。需要DNS服务商提供API,Certbot通过API添加TXT记录验证域名所有权。
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
执行后会提示去DNS控制台添加TXT记录。雨云的控制台DNS管理可以直接添加,操作简单。通配符证书好处是子域名随便加,不用每个子域名都单独申请。
服务器配置优化
加几行提升安全性:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
OCSP Stapling可以减少浏览器验证证书的延迟。前提是防火墙开放443端口,并且服务器能访问Let’s Encrypt的OCSP服务器。
总结
– 安装certbot
– 申请证书(–nginx或certonly)
– 配置Nginx引用证书文件
– 设置crontab自动续签
– 测试续签是否正常
这套流程跑完,HTTPS就稳了。雨云的服务器默认系统镜像比较干净,装certbot基本不会遇到依赖冲突,省心。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容