(一)ACME安装

curl  https://get.acme.sh | sh

alias acme.sh=~/.acme.sh/acme.sh

安装程序会自动做以下操作:

  • 自动把 acme.sh 安装到你的 home.acme.sh目录下,即~/.acme.sh/
  • 自动创建一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh
  • 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

(二)更改默认证书

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

acme被ZeroSSL收购,其默认的证书方式为ZeroSSL,但此证书生成时会携带邮箱,因此更换为letsencrypt。

b. 引入api id和key,以dnspod为例

export CF_Key="xxx"
export CF_Email="[email protected]"

export CF_Key="xxx"
export CF_Email="[email protected]"

不同提供商,API参数值各不同,可参考下面的表格:自动 DNS API 集成

c. 生成证书

acme.sh --issue --dns dns_cf -d *.fats.eu.org

acme.sh --issue --dns dns_cf  -d *.debs.eu.org

--dns的配置值也是根据域名提供商来决定,dns_dp表示dnspod。更多参数值可看下方表格

表:自动 DNS API 集成

服务商名称服务商简称所需API参数获取API参数地址
cloudxnscxexport CX_Key="123456" export CX_Secret="abcdef"点击访问
dnspod.cndpexport DP_Id="123456" export DP_Key="abcdef"点击访问
aliyunaliexport Ali_Key="123456" export Ali_Secret="abcdef"点击访问
cloudflarecfexport CF_Key="123456" export CF_Email="[email protected]"点击访问
linodelinodeexport LINODE_API_KEY="123456"点击访问
heheexport HE_Username="username" export HE_Password="password"he的用户名密码
digitaloceandgonexport DO_API_KEY="123456"点击访问
namesilonamesiloexport Namesilo_Key="123456"点击访问
awsawsexport AWS_ACCESS_KEY_ID=123456 export AWS_SECRET_ACCESS_KEY=abcdef点击访问
namecomnamecomexport Namecom_Username="username" export Namecom_Token="123456"点击访问
freednsfreednsexport FREEDNS_User="username" export FREEDNS_Password="password"freedns的用户名密码
godaddygdexport GD_Key="123456" export GD_Secret="abcdef"点击访问
yandexyandexexport PDD_Token="abcdef"点击访问

(四)copy/安装 证书

默认生成的证书都放在安装目录下: ~/.acme.sh/,但是不要在web服务器中直接引用目录下的证书文件,也不要手动来拷贝证书文件到具体的web服务器中,手动拷贝会导致之后更新证书流程不能完全自动。

正确方式是使用acme.sh的安装证书命令,acme.sh自动拷贝证书文件到具体目录中,拷贝命令会被记录下来,之后自动更新证书流程也会执行此拷贝步骤,从而实现更新证书流程的完全自动化。

格式例子如下:

acme.sh --install-cert -d *.debs.eu.org \
    --key-file /root/ca/private.key \
    --fullchain-file /root/ca/ca.cert \
    --reloadcmd "sudo service nginx force-reload"

根据web服务器需要的文件按需引入对应的参数,reloadcmd定义证书更新后重启对应的web服务命令。

以nginx为例:

        
acme.sh --install-cert -d *.93220447.xyz \
    --key-file /root/ca/private.key \
    --fullchain-file /root/ca/ca.cert \
    --reloadcmd "sudo service nginx force-reload"

(五)web服务使用证书

通过上一步安装证书,已经把证书拷贝到目标的目录,接下来就是在web服务中使用证书即可。

以nginx为例:

...
server {
  listen       443 ssl;
  ssl_certificate      /etc/nginx/cert_file/fullchain.pem;
  ssl_certificate_key  /etc/nginx/cert_file/key.pem;
  # ...
}

更新证书

目前证书在 60 天以后会自动更新,你无需任何操作,因为在acme.sh安装时,已经把相关的自动更新程序写入到crontab中,如果想要查看,可以通过以下命令:

crontab -l

输出内容包含一个自动更新程序,大致内容如下:

56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

停止自动更新

acme.sh --remove -d example.com 

或者手动在~/.acme.sh/目录下删除对应的域名目录,如~/.acme.sh/a.com