简介

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

主要步骤:

  1. 安装 acme.sh
  2. 生成证书
  3. 安装证书
  4. 配置nginx
  5. 更新
  6. 出错怎么办, 如何调试
  7. 吊销,移除证书

1. 安装

curl  https://get.acme.sh | sh

2. 生成证书

acme.sh  --issue  -d blog.linjinbao66.tk --webroot  /root/linjinbao666.github.io

只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用。此处的webroot需要在nginx配置文件中指定为root位置。示例:

server {
    listen 80;
    listen [::]:80;
    server_name blog.linjinbao66.tk;
    root /root/linjinbao666.github.io;
    location /{
    	proxy_pass http://127.0.0.1:9010;
    }
}

** 注意上述配置中的root**。

3. 安装证书

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

acme.sh --install-cert -d blog.linjinbao66.tk \

--key-file       /data/blog/key.pem  \

--fullchain-file /data/blog/cert.pem \

--reloadcmd     "service nginx force-reload"
  • 注意此处的安装证书只是在目标地址生成了一个key.pem文件和一个cert.pem文件,如果路径中的blog没有创建,则会出错。

4. 配置nginx

以上步骤,只是生成了所需要的证书文件,key.pemcert.pem,真正使用起来还必须使用配置到nginx配置里面。实例:

server {
        listen 443;
        server_name blog.linjinbao66.tk;
        ssl on;
        ssl_certificate   /data/blog/cert.pem;
        ssl_certificate_key  /data/blog/key.pem;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
            proxy_pass http://127.0.0.1:9010;
        }
}

5. 更新

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心。

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

acme.sh  --upgrade  --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

acme.sh --upgrade  --auto-upgrade  0

出错处理

如果出错, 请添加 debug log:

acme.sh  --issue  .....  --debug 

或者:

acme.sh  --issue  .....  --debug  2

7. 吊销,移除证书

命令acme.sh --list列出所有证书:

root@instance-1:~# acme.sh --list
Main_Domain          KeyLength  SAN_Domains  Created                       Renew
blog.linjinbao66.tk  ""         no           Tue Oct 13 05:43:45 UTC 2020  Sat Dec 12 05:43:45 UTC 2020
linjinbao66.tk       "ec-256"   no           Sat Oct  3 19:00:18 UTC 2020  Wed Dec  2 19:00:18 UTC 2020

命令acme.sh --revoke -d blog.linjinbao66.tk --ecc 吊销证书。

命令acme.sh --remove -d blog.linjinbao66.tk --ecc 移除证书

参考地址:acmesh-official/acme.sh