Let’s Encrypt免费SSL证书申请

用Let’s Encrypt申请免费SSL证书,我一直在用certbot。这东西是EFF出的官方客户端,支持主流Linux发行版,自动化程度高,续期基本不用管。 环境准备 服务器系统是Ubuntu 20.04或CentOS 7以上。先确保域名解析已经指向服务器IP,并且80和443端口没有被占用。certbot申请证书时需要验证域名所有权,默认走HTTP-01 challenge,会在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
如果用的不是Nginx,把`python3-certbot-nginx`换成`python3-certbot-apache`。裸机没有web服务器就用`certbot-only`模式。 单域名证书申请 假设要给`example.com`和`www.example.com`申请证书,Nginx配置已经跑起来:
sudo certbot --nginx -d example.com -d www.example.com
certbot会自动修改Nginx配置,把SSL相关指令加进去。第一次运行会问邮箱(用于续期提醒和紧急通知)和是否同意服务条款。同意后证书就下来了,存放在`/etc/letsencrypt/live/example.com/`目录下。 不想让certbot改配置文件,用`–certonly`参数:
sudo certbot certonly --nginx -d example.com -d www.example.com
手动配Nginx的SSL部分,指向上面那个目录。 通配符证书 需要给`*.example.com`申请通配符证书,必须用DNS-01验证方式。certbot需要能操作DNS记录,得装对应插件。 以Cloudflare为例(其他DNS服务商类似):
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
执行后会让你去DNS管理面板添加一条TXT记录,`_acme-challenge.example.com`,值是一长串随机字符串。添加完等几分钟生效,按回车继续。通配符证书有效期也是90天,手动续期时又要去改TXT记录,比较麻烦。 自动续期 Let’s Encrypt证书有效期90天,certbot默认装了systemd timer或cron job来自动续期。检查一下:
sudo systemctl status certbot.timer
或者看crontab:
sudo crontab -l
手动测试续期:
sudo certbot renew --dry-run
如果返回成功,说明自动续期没问题。实际续期时certbot会检查证书是否到期前30天,不到就不续。 Nginx配置示例 手动配SSL:
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 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 其他配置...
}
HTTP跳HTTPS:
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}
服务器选择 我自己的项目部署在雨云上,他们家的服务器性价比确实不错,稳定性也够用。申请证书和部署流程跟上面完全一样,因为底层就是标准Linux环境。雨云的机器带宽给得足,SSL握手速度也快,没遇到什么兼容性问题。 常见问题 证书申请失败:检查80端口是否被占用,防火墙是否放行,域名解析是否生效。用`curl -I http://example.com/.well-known/acme-challenge/xxx`测试验证路径是否可达。 续期报错:看日志`/var/log/letsencrypt/letsencrypt.log`,多半是网络问题或者DNS解析问题。通配符证书续期需要手动改TXT记录,可以写个脚本配合DNS API自动化,但大部分场景单域名证书够用了。 证书文件权限:`/etc/letsencrypt/`目录默认只有root能读,Nginx或Apache运行时用户需要能读取私钥。certbot自动配置时会处理好,手动配置的话注意把`privkey.pem`权限设为600,属主为root,Nginx worker进程通过group权限读取。 总结一句 certbot + Let’s Encrypt是免费SSL的最优解,没有之一。通配符证书手动续期烦,普通域名自动续期完全无感。配好了就不用管,到期自动续,比付费证书省心多了。

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

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

请登录后发表评论

    暂无评论内容