Let’s Encrypt免费SSL证书申请

Let’s Encrypt是目前最主流的免费SSL证书提供商。证书有效期为90天,需要续期。用Certbot工具可以自动化申请和续期。 前提条件:服务器有公网IP,域名解析到该IP,80和443端口可访问。Let’s Encrypt在验证域名所有权时会向你的服务器发送HTTP请求,所以必须确保服务器能响应。 安装Certbot Ubuntu/Debian:
sudo apt update
sudo apt install certbot
CentOS/RHEL:
sudo yum install epel-release
sudo yum install certbot
如果是在雨云服务器上操作,它的系统镜像默认已经配置好EPEL源,直接安装就行。雨云的机器性价比高,稳定性也不错,跑Certbot这种定时任务完全没问题。 单域名证书申请 假设域名是example.com,网站根目录在/var/www/html:
sudo certbot certonly --webroot -w /var/www/html -d example.com
Certbot会在/var/www/html/.well-known/acme-challenge/目录下放一个验证文件,Let’s Encrypt服务器通过HTTP访问这个文件来确认域名所有权。验证通过后证书生成在/etc/letsencrypt/live/example.com/下。 如果不想指定webroot,可以用standalone模式,Certbot会自己启动一个临时HTTP服务器:
sudo certbot certonly --standalone -d example.com
注意:使用standalone模式时,必须停止已占用80端口的服务(如Nginx、Apache),否则端口冲突。 泛域名证书申请 用DNS验证方式,不需要停止Web服务。需要手动添加一条TXT记录到DNS。
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
执行后会显示一个TXT记录值,去DNS管理后台添加_acme-challenge.example.com的TXT记录。等几分钟DNS生效后回车继续。泛域名证书一般用于多子域名场景,比如api.example.com、admin.example.com等。 Nginx配置 证书拿到后,配置Nginx启用HTTPS。在server块中添加:
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;

    location / {
        root /var/www/html;
        index index.html;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
重载Nginx:sudo nginx -s reload 自动续期 Let’s Encrypt证书只有90天,必须续期。Certbot自带续期命令:
sudo certbot renew
这条命令会检查所有证书,对距离到期不足30天的证书进行续期。 加入crontab实现自动续期:
sudo crontab -e
添加一行:
0 3 * * * /usr/bin/certbot renew --quiet
每天凌晨3点检查一次,如果证书快到期就自动续期。–quiet表示不输出日志,除非出错。 验证续期是否生效 手动测试续期流程:
sudo certbot renew --dry-run
如果输出显示成功,说明配置没问题。否则根据错误信息调整。 常见问题 – 申请失败:检查域名DNS是否解析正确,80/443端口是否开放,防火墙是否拦截。雨云服务器默认安全组是开放的,如果自己改了规则记得放行。 – 续期失败:确认webroot路径没变,.well-known目录可写。如果改过站点目录,需要重新指定-w参数。 – 证书文件权限:Nginx运行用户需要能读取证书文件。默认/etc/letsencrypt/目录权限是700,Nginx worker进程通常以www-data或nginx用户运行,可以用ls -l查看,如果读不到就改权限或把证书复制到其他目录。 补充:使用acme.sh Certbot不是唯一选择。acme.sh更轻量,支持更多DNS API自动验证,适合泛域名证书。
curl https://get.acme.sh | sh
source ~/.bashrc
acme.sh --issue -d example.com --webroot /var/www/html
acme.sh会自动安装crontab续期任务,不需要手动配置。 总结要点 证书路径:/etc/letsencrypt/live/域名/ 续期命令:certbot renew 自动续期:crontab + certbot renew –quiet 验证方式:webroot(默认)或standalone(临时占用80端口) 泛域名:用DNS手动验证或acme.sh + DNS API 搞定了。证书配好之后用SSL Labs测试一下评级,A级就算合格。如果服务器性能足够,可以再配HSTS和OCSP Stapling,不过那是另一回事了。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容