截止目前免费的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,国外的没问题.如果后续申请证书出问题,可以考虑切换CAacme.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 reloadOther有的时候安装错了会要移除,这里记录一下acme.sh --remove -d 你的域名查看有哪些域名正在自动管理中acme.sh --listdns形式申请证书在运行命令之前先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中,如果变了去里面手动修改就行了.泛域名我试过一次,但是没成功,还是老老实实一个域名跑一次流程算了....