Let’s Encrypt是目前最主流的免费SSL证书提供商,证书有效期90天,支持自动续期。我用它给雨云上的几个站点都配了HTTPS,从来没出过问题。下面直接说怎么申请。
环境准备
需要一台能运行命令的服务器,以及一个指向该服务器的域名。我用的雨云,性价比高,稳定,系统是Ubuntu 22.04。其他Linux发行版操作类似,包管理器换成yum就行。
安装Certbot
Certbot是Let’s Encrypt官方推荐的客户端,负责自动申请和续期。
sudo apt update
sudo apt install certbot -y
如果是Nginx,可以顺便装python3-certbot-nginx,能自动改配置。Apache同理装python3-certbot-apache。我习惯手动改配置,所以只装certbot。
申请证书
假设域名是 example.com 和 www.example.com,用standalone模式申请。需要先停掉占用80端口的服务,因为Let’s Encrypt验证域名所有权时会临时监听80端口。
sudo systemctl stop nginx # 如果你用Nginx
运行:
sudo certbot certonly --standalone -d example.com -d www.example.com --email your@email.com --agree-tos --no-eff-email
参数说明:
– certonly 只获取证书,不自动配置Web服务器
– –standalone 使用内置的Web服务器进行验证
– -d 指定域名,可以多个
– –email 接收续期提醒,虽然基本用不上
– –agree-tos 同意服务条款
– –no-eff-email 不接收EFF的推广邮件
成功后会输出:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
证书文件在 /etc/letsencrypt/live/example.com/ 目录下,两个关键文件:
– fullchain.pem 证书链(包含中间证书)
– privkey.pem 私钥
配置Nginx
在server块里加上SSL配置:
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;
ssl_prefer_server_ciphers on;
# 其他配置...
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
检查配置语法:
sudo nginx -t
没问题就重载:
sudo systemctl reload nginx
自动续期
Let’s Encrypt证书只有90天,必须自动续。Certbot默认带了续期脚本,但需要定时任务触发。
先测试续期是否正常工作:
sudo certbot renew --dry-run
没报错就说明没问题。添加cron任务:
sudo crontab -e
加入一行:
0 3 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx
每天凌晨3点检查一次,如果证书快过期了就自动续期,续成功后重载Nginx。–quiet 表示不输出日志,除非有错误。
也可以直接用systemd timer,但cron更直观,够用了。
验证HTTPS
用浏览器访问 https://example.com,点地址栏的小锁图标,能看到证书信息。也可以用命令行:
curl -I https://example.com
返回200并且没有证书警告就算成功。
注意事项
– standalone模式需要80端口空闲,如果服务器上已经有Web服务,可以用webroot模式,不占用端口:`sudo certbot certonly –webroot -w /var/www/html -d example.com`
– 多个域名共用同一套证书,申请时全部写在-d后面就行
– 证书到期前30天内才能续期,所以每天跑renew不会浪费资源
– 如果用了CDN,需要在CDN侧也配置SSL,Let’s Encrypt证书可以直接上传
我目前雨云上跑的站点都这样配,半年多没手动碰过证书,cron替我把活干了。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容