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中,如果变了去里面手动修改就行了.
泛域名我试过一次,但是没成功,还是老老实实一个域名跑一次流程算了....