基础准备

获取并安装的命令:

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

安装依赖程序 socat

Centos 安装命令:

yum -y install socat
Plain text

debian

apt update && apt install -y socat jq
Plain text

刷新环境变量

source ~/.bashrc
Plain text

开启 acme.sh 自动更新

acme.sh --upgrade --auto-upgrade
Plain text

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

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

生成证书

Web 服务器验证

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

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

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

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

注意, 无论是 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 \
Shell

独立模式

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

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

安装证书

正确的使用方法是使用 –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"
Shell

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"
Shell

(温馨提醒, 这里用的是 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
Shell

自动更新脚本

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

强制更新证书

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

查看证书有效期:

~/.acme.sh/acme.sh --list
Plain text