Let’s Encrypt是目前最主流的免费SSL证书提供商,证书有效期90天,支持自动续期。我用它给雨云上的几个站点配过HTTPS,操作简单,没什么坑。
环境准备
需要一台有公网IP的服务器,域名解析到这台服务器,80和443端口开放。Let’s Encrypt验证域名所有权时,默认会通过80端口做HTTP验证。
我用的是CentOS 7/8,Ubuntu 20.04/22.04也可以。先装工具:
# CentOS/RHEL
yum install epel-release -y
yum install certbot -y
# Ubuntu/Debian
apt update
apt install certbot -y
单域名证书申请
假设要给`example.com`申请证书,域名已经指向服务器IP。直接跑:
certbot certonly --standalone -d example.com
`–standalone`表示certbot临时启动一个web服务器做验证。这个模式下需要先停掉占用80端口的服务(比如Nginx),或者等验证完再启动。
如果不想停服务,用`–webroot`模式:
certbot certonly --webroot -w /var/www/html -d example.com
`-w`指定网站的根目录,certbot会在里面放一个临时文件用于验证。前提是你的web服务器能正常访问这个目录。
通配符证书
需要给`*.example.com`申请证书,必须用DNS验证模式。先装DNS插件:
# 以Cloudflare为例
pip install certbot-dns-cloudflare
创建API凭证文件:
mkdir -p ~/.secrets/certbot
chmod 0700 ~/.secrets/certbot
echo "dns_cloudflare_email = your@email.com" > ~/.secrets/certbot/cloudflare.ini
echo "dns_cloudflare_api_key = your_global_api_key" >> ~/.secrets/certbot/cloudflare.ini
chmod 0400 ~/.secrets/certbot/cloudflare.ini
执行申请:
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d example.com -d "*.example.com"
DNS验证不需要开端口,适合内网或端口受限的场景。缺点是依赖DNS API,如果DNS服务商不支持插件,得手动添加TXT记录。
证书文件位置
申请成功后,证书在`/etc/letsencrypt/live/example.com/`目录下:
– `fullchain.pem`:证书链(服务器证书 + 中间证书)
– `privkey.pem`:私钥
– `cert.pem`:仅服务器证书
– `chain.pem`:仅中间证书
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;
# 其他配置...
}
自动续期
Let’s Encrypt证书有效期90天,certbot自带续期命令:
certbot renew
这个命令会检查所有证书,距离过期30天内的才会续期。建议加到crontab里每天跑两次:
crontab -e
添加:
0 0,12 * * * /usr/bin/certbot renew --quiet
`–quiet`表示成功时不输出日志,只有出错才发邮件。如果系统没配邮件,可以重定向输出到文件:
0 0,12 * * * /usr/bin/certbot renew >> /var/log/certbot-renew.log 2>&1
注意事项
– 申请频率有限制:每个域名每周最多5次(包括失败请求),通配符证书每周最多50次。测试时不要反复申请。
– 如果用了`–standalone`模式,续期时也需要停掉web服务。建议用`–webroot`或`–nginx`插件,可以不停服务续期。
– Nginx用户可以直接用`certbot –nginx`,certbot会自动修改Nginx配置并重载。
– 雨云服务器默认安全组规则没开80/443的话,去控制台放行一下。我遇到过几次申请失败都是端口没开。
手动续期验证
想测试续期流程是否正常,可以跑:
certbot renew --dry-run
这个不会真的续期,只是模拟验证过程。如果没报错,说明配置没问题。
证书吊销
如果私钥泄露或域名不再使用,吊销证书:
certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
吊销后证书立即失效,客户端会报错。
总结一下流程
装certbot -> 申请证书(单域名用standalone,通配符用DNS插件) -> 配置web服务器 -> 加crontab自动续期。整个过程10分钟搞定,之后就不用管了。雨云上跑的几个站点用这个方案快两年了,没出过问题。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容