1、安装 acme.sh,同时定时任务将自动添加一条任务

# 安装路径:~/.acme.sh/;注意修改邮箱
$ curl https://get.acme.sh | sh -s email=my@mydomain.com

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@mydomain.com

2、验证域名

# 通过网站根目录,域名需要能被访问,根目录需要可写权限
$ ~/.acme.sh/acme.sh --issue -d mydomain.com -w /var/www/html

# 通过 Nginx,域名需要能被访问
$ ~/.acme.sh/acme.sh --issue -d mydomain.com --nginx

# 手动 DNS 方式,这种方式无法自动更新证书
## 先执行 --issue,根据提示通过 云解析DNS 添加 TXT 解析记录
$ ~/.acme.sh/acme.sh --issue --dns -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
## 再次执行 --renew
$ ~/.acme.sh/acme.sh --renew -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

# 自动 dns 方式
## 以 dnspod 为例,你需要先登录到 dnspod 账号, 生成你的 api id 和 api key, 都是免费的。然后:
$ export DP_Id="<id>"
$ export DP_Key="<key>"
$ ~/.acme.sh/acme.sh --issue --dns dns_dp -d *.mydomain.com
# acme.sh 默认证书服务为 zerossl ,可通过 --server 参数修改
$ ~/.acme.sh/acme.sh --issue .... --server zerossl
# 或者
$ ~/.acme.sh/acme.sh --issue .... --server https://acme.zerossl.com/v2/DV90
# 或设置默认服务,设置后不带 --server 参数也将使用 letsencrypt 服务
$ ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

Short Name

ACME server URL

Usage Wiki

zerossl

https://acme.zerossl.com/v2/DV90

ZeroSSL.com CA

letsencrypt

https://acme-v02.api.letsencrypt.org/directory

N/A

buypass

https://api.buypass.com/acme/directory

BuyPass.com CA

sslcom

https://acme.ssl.com/sslcom-dv-rsa

https://acme.ssl.com/sslcom-dv-ecc

SSL.com CA

google

https://dv.acme-v02.api.pki.goog/directory

Google Public CA

3、将生成的证书文件移动到 nginx 或 apache 证书目录

# 使用安装命令将证书文件复制到对应的证书目录
## nginx
~/.acme.sh/acme.sh --install-cert -d *.mydomain.com \
--key-file       /etc/nginx/certs.d/mydomain.com.key \
--fullchain-file /etc/nginx/certs.d/mydomain.com.pem \
--reloadcmd     "nginx -s reload"
## apache
~/.acme.sh/acme.sh --install-cert -d *.mydomain.com \
--cert-file      /etc/apache/certs.d/cert.pem \
--key-file       /etc/apache/certs.d/key.pem \
--fullchain-file /etc/apache/certs.d/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

4、配置证书

# 配置 ssl,以 nginx 为例,注意 ssl_certificate 使用的是 fullchain-file 对应文件
server {
    listen       443 ssl;
    ssl_certificate /etc/nginx/certs.d/mydomain.com.pem;
    ssl_certificate_key /etc/nginx/certs.d/mydomain.com.key;
    ssl_session_timeout 5m;
    #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;
    # ...
}

5、证书续期,安装时已在系统中加入定时任务,每60天自动续订

# 旧的证书文件将直接被覆盖
$ ~/.acme.sh/acme.sh --renew -d mydomain.com

6、停止证书续期

# 该操作不会删除证书文件目录(~/.acme.sh/mydomain.com)
$ ~/.acme.sh/acme.sh --remove -d mydomain.com