「技术教程」免费的Let’s Encrypt证书插图

一个比较离谱的事情发生了,我每年在阿里云搞得免费证书现在有效期只有3个月,相当于我TM每三个月就要去手动更新一下证书,之前的博客也写了SSL这个东西简直就是一本万利的事情(局域网内搭建浏览器可信任的SSL证书),这种完全不能忍,所以拜拜了资本家,老子不用你了,免费证书不香吗?

Let’s Encrypt就是免费证书的代表,这玩意几乎所有设备都支持,并且能申请通配证书,步骤如下:

安装snapd,这是为了安装certbot的工具

yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap

安装certbot,这个工具就是拿来申请证书

snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

申请证书

certbot certonly --manual --preferred-challenges dns
  1. 在运行这个命令之后会开始证书的申请步骤,具体如下:
  2. 如果需要提供邮箱就按照提示输入邮箱即可;
  3. 按照提示输出域名,用空格分隔多个域名
    1. 注意:eswlnk.com和blog.eswlnk.com是两个不同的域名,如果使用通配域名就是*.eswlnk.com
  4. 通过提示进行DNS验证,这里按照要求添加一个TXT解析即可
    1. 注意:连续超过5次解析失败,服务器在未来五个小时都无法继续申请
  5. 成功之后就会生成对应的证书文件;

使用证书

certbot 生成的证书文件很多,其中对于nginx等常规的web server就只有两个有用:

  • fullchain.pem:这个是证书文件,兼容大部分web server;
  • privkey.pem:这个是秘钥文件;
server {
    listen       443 ssl http2 default_server;
    listen  [::]:443 ssl http2 default_server;
    server_name tangyuecan.com;
    ssl_certificate /ssl/fullchain.pem;
    ssl_certificate_key /ssl/privkey.pem;
    root   /var/www/html;
    index index.php;
    location / {
  try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
  include fastcgi.conf;
  fastcgi_intercept_errors on;
  fastcgi_pass xxx.xxx.xxx.xxx:xxxx;
    }
}

自动更新证书

没有想到吧,还有这个功能,原理也很简单,只要已经验证过的域名后续可以让certbot帮你自动更新,只需要在服务器上运行:

certbot renew --dry-run