Let’s Encrypt免费SSL证书申请

用Let’s Encrypt给网站加HTTPS,核心工具是Certbot。这东西是EFF官方维护的客户端,支持Nginx、Apache、独立模式等多种方式。我主要用Nginx,下面按这个场景写。 前提条件 – 服务器装好Nginx,能正常访问 – 域名解析到服务器IP – 服务器开放80和443端口(Let’s Encrypt验证域名所有权需要80端口) 安装Certbot 不同系统命令不一样。Ubuntu/Debian:
sudo apt update
sudo apt install certbot python3-certbot-nginx
CentOS/RHEL:
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
雨云的服务器镜像一般自带EPEL源,直接装就行,比较省事。 申请证书 Certbot会自动修改Nginx配置,最省事的方式:
sudo certbot --nginx -d example.com -d www.example.com
-d后面跟域名,多个域名就写多个-d。Certbot会检查80端口是否通,确认域名所有权,自动申请证书并配置HTTPS。 如果不想让Certbot改Nginx配置,用独立模式:
sudo certbot certonly --standalone -d example.com -d www.example.com
独立模式需要先停掉Nginx,因为Certbot要占用80端口做验证。验证完证书会生成在/etc/letsencrypt/live/example.com/目录下,自己手动配Nginx。 证书文件结构 申请完看/etc/letsencrypt/live/yourdomain/目录: – privkey.pem:私钥,别泄露 – fullchain.pem:完整证书链(包含中间证书) – cert.pem:域名证书(不含中间证书) – chain.pem:中间证书 Nginx配置里直接引用fullchain.pem和privkey.pem就行。 Nginx手动配置示例 如果用了certonly独立模式,在server块里加上:
server {
    listen 443 ssl;
    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;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}
80端口做301跳转,强制HTTPS。 自动续期 Let’s Encrypt证书有效期90天,需要定期续签。Certbot自带续签命令:
sudo certbot renew --dry-run
–dry-run是测试,没问题就删掉它正式执行。把这条命令加到crontab里,每天跑一次:
0 3 * * * /usr/bin/certbot renew --quiet
–quiet表示成功时不输出日志,只有失败才报错。每天凌晨3点检查一次,距离过期30天内才会真正续签。 常见问题 1. 申请失败提示”Domain not found”:检查DNS解析,ping一下域名看IP对不对 2. “Too many certificates already issued”:Let’s Encrypt有速率限制,每周每个域名最多50张证书。测试用staging环境:`certbot certonly –staging` 3. 续签报”certbot command not found”:确认certbot安装路径,或者用完整路径`/usr/bin/certbot` 4. 证书申请成功但浏览器提示不安全:检查Nginx配置里证书路径是否正确,或者证书链不完整。fullchain.pem比cert.pem保险 多域名通配符证书 Let’s Encrypt从2018年开始支持通配符证书,但必须用DNS验证方式,不能用HTTP验证。需要DNS服务商提供API,Certbot通过API添加TXT记录验证域名所有权。
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
执行后会提示去DNS控制台添加TXT记录。雨云的控制台DNS管理可以直接添加,操作简单。通配符证书好处是子域名随便加,不用每个子域名都单独申请。 服务器配置优化 加几行提升安全性:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
OCSP Stapling可以减少浏览器验证证书的延迟。前提是防火墙开放443端口,并且服务器能访问Let’s Encrypt的OCSP服务器。 总结 – 安装certbot – 申请证书(–nginx或certonly) – 配置Nginx引用证书文件 – 设置crontab自动续签 – 测试续签是否正常 这套流程跑完,HTTPS就稳了。雨云的服务器默认系统镜像比较干净,装certbot基本不会遇到依赖冲突,省心。

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

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

请登录后发表评论

    暂无评论内容