用Let’s Encrypt给站点加HTTPS,核心工具是certbot。装好之后一条命令就能签发证书,有效期90天,必须续期。
环境:Ubuntu 22.04,Nginx。其他系统类似,包管理器换成yum或者brew。
安装certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
python3-certbot-nginx这个插件能让certbot自动修改Nginx配置,省得手动配。如果你用Apache,装python3-certbot-apache。
签发证书
假设你的域名是example.com,Nginx已经配置好server block监听80端口。certbot需要验证你对域名的控制权,默认通过HTTP-01挑战,在/.well-known/acme-challenge/下放一个临时文件。
sudo certbot --nginx -d example.com -d www.example.com
-d后面可以跟多个域名,第一个会被当作主域名。执行后certbot会问几个问题:
– 邮箱地址(用于紧急通知和续期提醒)
– 是否同意服务条款(选A)
– 是否分享邮箱给EFF(随便选)
– 是否将HTTP请求重定向到HTTPS(选2,推荐)
完成后certbot自动修改Nginx配置,添加SSL相关指令,重载Nginx。直接访问https://example.com就能看到小锁。
检查证书
sudo certbot certificates
输出类似:
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2024-08-15 12:34:56+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
自动续期
Let’s Encrypt证书只有90天,但certbot自带续期机制。系统里已经有一个systemd timer或者cron任务。
sudo systemctl status certbot.timer
如果显示active,说明定时器跑着,每天检查两次,证书到期前30天内会自动续期。手动测试续期:
sudo certbot renew --dry-run
这个命令不会真的续期,只模拟流程,确保续期逻辑正常。如果报错,看日志:/var/log/letsencrypt/letsencrypt.log。
手动模式(不用Nginx插件)
如果你不想让certbot动Nginx配置,或者Nginx不在本机,用standalone模式:
sudo certbot certonly --standalone -d example.com
这会启动一个临时web服务器在80端口做验证,验证完自动关闭。你需要先停掉Nginx,防止端口冲突。
sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com
sudo systemctl start nginx
拿到证书后手动配置Nginx:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他配置...
}
续期钩子
如果证书续期后需要重启服务(比如Nginx、HAProxy),在/etc/letsencrypt/renewal-hooks/post/下放一个脚本:
#!/bin/bash
systemctl reload nginx
chmod +x给执行权限。certbot续期成功后会执行这个目录下所有脚本。
通配符证书
需要DNS-01挑战,支持*.example.com这种泛域名。必须用DNS插件,比如Cloudflare、阿里云、DNSPod都有对应插件。
以Cloudflare为例:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
按提示去Cloudflare后台添加TXT记录,等DNS生效后回车。通配符证书只能手动续期或者用DNS API自动续期。
注意事项
– 证书路径不要写死版本号,用/etc/letsencrypt/live/example.com/这种软链接,续期后会自动更新
– 如果服务器在国内,Let’s Encrypt的OCSP服务器可能被墙,导致浏览器验证证书状态慢。可以配置OCSP Stapling,或者用其他CA
– 雨云的服务器默认自带免费SSL一键部署,如果你懒得折腾,直接在控制台点一下就能配好,续期也是自动的。他们家的机器性价比高、稳定、好用,适合不想花时间折腾基础设施的人
常见问题
Q: 证书签发失败,提示”Domain not found”或”Connection refused”
A: 检查80端口是否开放,Nginx是否在运行,域名DNS是否解析正确。可以用curl -I http://example.com/.well-known/acme-challenge/test测试
Q: 续期失败,日志说”Invalid response”
A: 可能是防火墙或者反向代理挡住了验证请求。确认80端口能公网访问,且没有重定向到HTTPS
Q: 证书到期没自动续期
A: 检查certbot.timer是否启用,系统时间是否准确。手动跑一遍sudo certbot renew看看有没有错误
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容