利用acme.sh快速获取SSL证书

教程类 · 2024-05-18

我利用到了这个开源项目 acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol (github.com)

实际上,证书签发商Let’s Encrpt为了简化自己的操作,设计了一个ACME的协议,用来实现SSL自动化签发,它的主要步骤就是用一条TXT DNS记录来验证这个域名的归属权是否属于你,若成功,便会进行自动生成SSL证书。

而这个项目acme.sh便是该协议的纯shelll脚本客户端。

接下来我演示一下 conix.ml 这个域名下泛二级域名(*.conix.ml)的SSL证书生成过程。

1、使用手动dns验证的方式

acme.sh --issue --dns -d "*.conix.ml" --yes-I-know-dns-manual-mode-enough-go-ahead-please

请输入图片描述
脚本的回显提示我们加添一个_acme-challenge.conix.ml的TXT DNS解析记录,并将值设置为Y2U_vKtQ2umHtsL9LQ37QV-SovNvELzX4HgT4ePfkaw。

2、在域名服务商那里添加记录,我的域名的DNS服务商是CloudFlare。为了增快解析生效速度,将TTL设置为1min。
请输入图片描述
我们可以在windows命令行里使用nslookup -q=txt查看TXT记录是否生效。
请输入图片描述

3、确定生效后,将之前命令里的--issue更改为--renew

acme.sh --renew --dns -d "*.conix.ml" --yes-I-know-dns-manual-mode-enough-go-ahead-please

请输入图片描述
可以看到其中醒目的sucess,我们已经成功生成了证书,它的目录在~/.acme.sh/*.conix.ml
请输入图片描述

4、但是官方不推荐我们直接使用这些证书,而是使用类似以下命令放到我们想放的地方。【Tips 文件夹需要首先建好】

acme.sh --install-cert -d "*.conix.ml" \ 
--key-file       /etc/nginx/conix.ml/key.pem  \
--fullchain-file /etc/nginx/conix.ml/cert.pem \
--reloadcmd     "service nginx force-reload"
install-cert

请输入图片描述

5、接下来我们尝试SSL证书是否生效,我们选择一个二级域名 test.conix.ml,设置A记录将DNS解析到你的服务器ip。
请输入图片描述

然后nginx写配置文件

server
{
   listen 443 ssl;# https 监听的是 443端口
   server_name  test.conix.ml;

   keepalive_timeout 100;

   ssl_session_cache   shared:SSL:10m;
   ssl_session_timeout 10m;

   ssl_certificate /etc/nginx/conix.ml/cert.pem; # 证书路径
   ssl_certificate_key /etc/nginx/conix.ml/key.pem; # 请求认证 key 的路径

   ssl_protocols TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;

   add_header Access-Control-Allow-Origin *;
   add_header Access-Control-Allow-Headers X-Requested-With;
   add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

   index index.html index.htm;
   location / {
       root  /var/www/html;
   }
}

server
{
   listen 80;
   server_name test.conix.ml;
   rewrite ^(.*) https://$server_name$1 permanent;
}

在浏览器中访问。
请输入图片描述
成功进行SSL连接并且看到证书。
这里突然发现颁发者是ZeroSSL,看来acme.sh默认的证书签发商已经不再是Let’s Encryp了。

查看已安装证书

acme.sh --list

删除证书

acme.sh remove <SAN_domains>

如果需要手动续签,则执行

acme.sh --renew -d <SAN_domains> --force

Theme Jasmine by Kent Liao