Let’s Encrypt免费SSL证书申请

用Let’s Encrypt给站点加HTTPS,最省事的方式是用Certbot。我两台雨云服务器都这么配的,跑了一年多没出过问题。 安装Certbot 系统是Ubuntu 22.04,直接走snap装,比apt版本新,自动续期也省心。
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
CentOS或Fedora用户用dnf:
sudo dnf install certbot python3-certbot-nginx
申请证书 两个场景:Nginx和独立服务器。 Nginx用户先确认配置文件加载了server_name,一行命令搞定:
sudo certbot --nginx -d example.com -d www.example.com
Certbot会自动修改Nginx配置,把80端口的请求重定向到443,证书文件存到/etc/letsencrypt/live/example.com/。 不用Nginx的用standalone模式,先停掉占用80端口的服务:
sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com -d www.example.com
sudo systemctl start nginx
证书文件在/etc/letsencrypt/live/example.com/下,四个文件: – cert.pem:服务器证书 – chain.pem:中间证书链 – fullchain.pem:cert.pem + chain.pem合并版 – privkey.pem:私钥,别泄露 自动续期 Let’s Encrypt证书有效期90天,Certbot默认加了systemd timer自动续期。验证一下:
sudo systemctl status certbot.timer
手动模拟续期测试:
sudo certbot renew --dry-run
输出显示”Congratulations”就说明续期通道正常。实际续期每天跑两次,证书到期前30天才会真正续。 Nginx配置参考 如果不用Certbot自动改配置,手动配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;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}
常见问题 1. 申请失败提示”DNS problem” 检查域名解析,A记录指向服务器IP,TTL别设太长。 2. 提示”too many certificates already issued” 免费版每周每个域名最多50张证书,测试环境用–staging参数:
sudo certbot certonly --standalone -d example.com --staging
3. 续期报错”Failed to connect to ACME server” 检查服务器出站443端口,Let’s Encrypt的API地址是acme-v02.api.letsencrypt.org。 多域名泛域名证书 泛域名需要DNS验证,不支持HTTP验证。以Cloudflare为例:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
按提示去DNS管理面板添加TXT记录,验证完后证书里包含example.com和所有子域名。 迁移证书 换服务器时直接把/etc/letsencrypt整个目录打包过去,在新机器上重装Certbot后运行:
sudo certbot renew --force-renewal
或者手动复制证书文件到对应路径。 雨云那台服务器我迁移过一次,证书打包scp过去,续期命令跑一遍就认了,没出坑。 注意事项 – 私钥文件权限设600,属主root – 别把privkey.pem提交到Git仓库 – 证书到期前30天自动续期,但建议每个月手动检查一次 – 如果用了CDN,CDN节点上的证书也要同步更新 配完HTTPS后去myssl.com测一下评级,A级算及格,A+需要配HSTS和OCSP Stapling。

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

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

请登录后发表评论

    暂无评论内容