acme.sh 证书自动签证步骤记录

截止目前免费的https证书都只有3个月有效期了,这是逼着我们买或者自动部署了...
没办法,不能将就了,前前后后部署了5个证书了,简单记录一下要点避免后面忘记了

安装

curl https://get.acme.sh | sh -s email=你的邮箱

国内服务器可能会安装失败,可以将源码下载下来后安装

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m 你的邮箱

设置别名

alias acme.sh=~/.acme.sh/acme.sh

切换CA

目前acme.sh默认的CA是zerossl,我在国内的服务器会出现访问超时的情况,我手动切换成了Let’s Encrypt,国外的没问题.如果后续申请证书出问题,可以考虑切换CA

acme.sh --set-default-ca --server letsencrypt

申请证书

dns和http方式我都试过,个人觉得还是http好用,不同dns还要设置不同的ak,记起来也麻烦.记录一下http的方式
需要注意的是nginx中要设置一下端口80的访问路径,让/.well-known/xxx 能正确访问
这里提供一个conf参考:

server {
    listen 80;
    server_name      你的域名;
    root    /var/www/html/xxx;  #自己建个文件夹,acme.sh会自动在里面创建 /.well-known/xxx 让CA来确认
    index    index.html;
    
    #一键申请SSL证书验证目录相关设置
        location ^~ /.well-known {
            allow all;
        }
    # 其他的重定向到443
    location / {
        return 301 https://$host$request_uri;
    }
}

设置完记得nginx -s reload一下,
然后就是申请证书:

acme.sh --issue -d 你的域名 -w /var/www/html/xxx  # -w跟你配置里设置的目录

等待一会就成功了,如果一直没成功,看一下域名解析有没指向你的IP,还有问题手动建一个.well-known文件夹,里面放个aaa.txt,试下访问看能不能成功,不能成功的话看一下配置有没问题

安装证书

到上一步acme.sh已经会自动申请证书了,这一步其实是把在~/.acme.sh/目录下的证书移动到你nginx里面配置的证书目录上,并且修改证书后自动重启nginx.
记录一下我习惯放的目录的命令:

acme.sh --install-cert -d 你的域名 --key-file  /etc/nginx/ssl/你的域名.key  --fullchain-file  /etc/nginx/ssl/你的域名.pem --reloadcmd   "nginx -s reload"

然后nginx中记得配置你设置的证书存放位置:

server {
    listen    443 ssl;
    server_name    你的域名;
    ssl_certificate     /etc/nginx/ssl/你的域名.pem;
    ssl_certificate_key    /etc/nginx/ssl/你的域名.key;    
    ssl_session_cache shared:le_nginx_SSL:1m;
    ssl_session_timeout 1440m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

    ...
}

如果你跟我一样,喜欢先运行acme.sh --install-cert成功后再修改nginx的conf的话,修改完成后记得手动运行一次

nginx  -s reload

Other

有的时候安装错了会要移除,这里记录一下

acme.sh --remove -d 你的域名

查看有哪些域名正在自动管理中

acme.sh --list

dns形式申请证书
在运行命令之前先export对应dns的id和secret,不同的dns的变量名称不一样,以腾讯云为例:

export Tencent_SecretId="id"
export Tencent_SecretKey="key"

然后运行

acme.sh --issue --dns dns_tencent -d 你的域名

运行成功后下次不需要再export变量名了,acme.sh会把id和secret记录在~/.acme.sh目录里的config中,如果变了去里面手动修改就行了.

泛域名我试过一次,但是没成功,还是老老实实一个域名跑一次流程算了....

标签: none

已有 4 条评论

  1. 博主真是太厉害了!!!

  2. 叼茂SEO.bfbikes.com

  3. 叼茂SEO.bfbikes.com

  4. 看的我热血沸腾啊https://www.ea55.com/

添加新评论