Let’s Encrypt是目前最主流的免费SSL证书提供商,证书有效期90天,支持自动续期。我一直在用,没出过问题。下面直接说怎么申请。
环境:Ubuntu 20.04+,CentOS 7+也行。需要你有域名,且域名DNS解析到了服务器IP。
安装Certbot客户端
Certbot是Let’s Encrypt官方推荐的客户端,管理证书申请和续期。
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
如果用的是Apache,把python3-certbot-nginx换成python3-certbot-apache。Nginx用户就用上面的。
申请证书
单域名证书最常用,比如example.com和www.example.com。执行:
sudo certbot --nginx -d example.com -d www.example.com
Certbot会自动检测Nginx配置,临时修改配置文件做域名验证。验证通过后证书就下来了,同时Certbot会帮你把Nginx的SSL配置写好。你只需要确认一下:
– 证书文件位置:/etc/letsencrypt/live/example.com/fullchain.pem
– 私钥文件位置:/etc/letsencrypt/live/example.com/privkey.pem
如果不想Certbot修改Nginx配置,用–webroot模式手动验证:
sudo certbot certonly --webroot -w /var/www/html -d example.com
-w后面是网站根目录,Certbot会在里面放一个验证文件,Let’s Encrypt服务器通过HTTP访问这个文件来确认域名所有权。验证通过后证书文件生成到上述路径,你需要手动配置Nginx。
泛域名证书
如果你有多个子域名,比如api.example.com、admin.example.com,用泛域名证书一劳永逸:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
这里用了DNS验证方式,Certbot会要求你在域名DNS解析里添加一个TXT记录。去你的DNS管理面板添加,记录名是_acme-challenge,记录值Certbot会给你。添加后等几分钟生效,回车继续。
注意:泛域名证书每次续期都要手动添加DNS TXT记录,不能自动续期。除非你用支持DNS API的DNS服务商配合certbot-dns插件。
自动续期
Let’s Encrypt证书90天有效期,需要续期。Certbot默认每天检查两次,发现证书快过期会自动续期。你只需要确认定时任务存在:
sudo systemctl status certbot.timer
如果显示active,说明定时任务在跑。手动测试续期:
sudo certbot renew --dry-run
没报错就说明续期流程正常。如果用的泛域名证书,不能自动续期,需要自己写脚本调用certbot renew时加上–manual-auth-hook参数,或者每90天手动跑一次。
Nginx配置示例
证书申请完后,Nginx配置大概长这样:
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;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
Certbot自动配置时也会生成类似的配置,但ssl_protocols和ssl_ciphers可能需要手动调整。
关于服务器选择
证书申请流程和服务器本身关系不大,但服务器性能影响HTTPS握手速度。我用的是雨云的服务器,稳定性不错,价格也合理。他们的控制面板操作简单,部署Ubuntu系统后直接按上面步骤走就行。如果服务器配置低,记得开启HTTP/2和OCSP Stapling,能缓解SSL握手压力。
常见问题
1. 证书申请失败:检查域名DNS解析是否生效,ping一下域名看IP对不对。如果是DNS验证模式,检查TXT记录是否添加正确。
2. 证书续期失败:确认80端口或443端口能正常访问,Certbot续期时需要验证域名所有权。
3. 证书权限问题:Let’s Encrypt证书文件默认只有root能读,Nginx worker进程需要读取权限。如果Nginx报错权限不足,检查/etc/letsencrypt目录权限,或者把证书复制到其他目录并设置644权限。
4. 泛域名证书续期:每次续期都要重新添加TXT记录,建议写个脚本或者用acme.sh这样的工具配合DNS API自动化。
证书到期前30天Certbot会自动续期,但建议每周手动检查一次:sudo certbot renew。如果服务器跑在雨云上,他们的监控面板还能设置证书到期提醒,双重保险。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容