基础准备

获取并安装的命令:

cd /root
curl https://get.acme.sh | sh -s email=my@example.com

安装依赖程序socat

Centos安装命令:

yum -y install socat

debian

apt update && apt install -y socat jq

刷新环境变量

source ~/.bashrc

开启 acme.sh 自动更新

acme.sh --upgrade --auto-upgrade

设置 acme.sh 的默认 CA 机构(letsencrypt / zerossl)

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

生成证书

Web服务器验证

1,若是Nginx服务器,http验证如下:(请把下面的mydomain.com更换为自己的域名再执行)

~/.acme.sh/acme.sh --issue  -d mydomain.com   --nginx

2,若是Apache服务器,http验证如下:(请把下面的mydomain.com更换为自己的域名再执行)

~/.acme.sh/acme.sh --issue  -d mydomain.com   --apache

注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https.
3,若是其他web服务器,http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.http验证命令如下:(请把下面的mydomain.com更换为自己的域名再执行)

非Web服务器验证

DNS API模式

这是首选主流方式,理由:1,免安装Web服务验证;2,设置简单,3,到期自动续签。
各主流DNS(CF,DNSPOD,CloudXNS,GoDaddy) API自动验证命令请点击此处浏览。
这里使用最热门的CF平台演示:
设置代码如下:

#以下填写CF账户的API密匙和自己的账户邮箱,API密匙在账户个人资料API令牌的Global API Key
export CF_Key="43a02288d910ac45241b679bfed5b17fe3937"
export CF_Email="yugogo@gmail.com"
#使用以下命令申请证书,注意修改为自己的域名再执行
acme.sh --issue -d "yourdomain.com" -d "*.yourdomain.com" --dns dns_cf \
--key-file       /home/ubuntu/ssl/yourdomain.key  \
--fullchain-file /home/ubuntu/ssl/yourdomain.pem \

独立模式

若你还没有运行任何web 服务, 并且80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

~/.acme.sh/acme.sh  --issue -d mydomain.com   --standalone

安装证书

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

~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

Apache example:

~/.acme.sh/acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

(温馨提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
–install-cert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.
详细参数请参考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc
这里以Nginx为例演示安装命令:

~/.acme.sh/acme.sh --installcert -d yugogogogo.ml --key-file /root/cert/private.key --fullchain-file /root/cert/cert.crt
chmod -R 755 /root/cert

自动更新脚本

~/.acme.sh/acme.sh --upgrade --auto-upgrade

强制更新证书

acme.sh --renew -d example.com --force

查看证书有效期:

~/.acme.sh/acme.sh --list