跳至主要內容

使用ACME申请证书(证书自动续期)

loocao...大约 4 分钟

使用ACME申请证书(证书自动续期)

(一)ACME安装

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

(二)更改默认证书

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

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

当然,也可以在生成证书时加一个--server参数来决定生成什么证书

--server letsencrypt

(三)生成证书

使用acme.sh --issue命令生成证书,但生成证书的同时会进行域名的所有权的验证。 acme.shopen in new window 有两种方式验证:HTTPDNS 验证。

注意:如果需要生成泛域名(*.a.com)的证书,不能使用HTTP认证域名,需要改用DNS认证的方式

1) HTTP验证方式

a. 生成证书

acme.sh --issue -d loocao.top --nginx /etc/nginx/nginx.conf

2) DNS验证方式

需要在域名上添加一条 txt 解析记录, 验证域名所有权

方式1:手动添加记录

a. 生成txt解析内容

acme.sh  --issue  --dns -d mydomain.com \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

以上mydomain.com只是测试域名,如果多个域名,则需多次使用-d配置,如-d www.a.com -d img.a.com

b. 把txt解析添加到域名管理面板中

c. 重新生成证书

acme.sh  --renew -d mydomain.com \
  --yes-I-know-dns-manual-mode-enough-go-ahead-please

注意,重新生成使用的是renew参数,把生成txt解析内容命令的issue改为renew

方式2:域名提供商api自动解析

a. 在域名提供商中,生成你的 api id 和 api key并记录,以dnspod为例
978b084fc1f38e5b606b2f085df7cdb1.png
978b084fc1f38e5b606b2f085df7cdb1.png
b. 引入api id和key,以dnspod为例
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

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

c. 生成证书

acme.sh --issue --dns dns_ali --server letsencrypt -d aa.com -d www.aa.com

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

表:自动 DNS API 集成

服务商名称服务商简称所需API参数获取API参数地址
cloudxnscxexport CX_Key="123456"
export CX_Secret="abcdef"
https://www.cloudxns.net/AccountManage/apimanage.htmlopen in new window
dnspod.cnopen in new windowdpexport DP_Id="123456"
export DP_Key="abcdef"
https://www.dnspod.cn/console/user/securityopen in new window
aliyunaliexport Ali_Key="123456"
export Ali_Secret="abcdef"
https://www.dnspod.cn/console/user/securityopen in new window
cloudflarecfexport CF_Key="123456"
export CF_Email="abc@example.com"
https://dash.cloudflare.com/profile/api-tokensopen in new window
linodelinodeexport LINODE_API_KEY="123456"https://manager.linode.com/profile/apiopen in new window
heheexport HE_Username="username"
export HE_Password="password"
heopen in new window的用户名密码
digitaloceandgonexport DO_API_KEY="123456"https://cloud.digitalocean.com/settings/applicationsopen in new window
namesilonamesiloexport Namesilo_Key="123456"https://www.namesilo.com/account_api.phpopen in new window
awsawsexport AWS_ACCESS_KEY_ID=123456
export AWS_SECRET_ACCESS_KEY=abcdef
http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.htmlopen in new window
namecomnamecomexport Namecom_Username="username"
export Namecom_Token="123456"
https://www.name.com/reseller/applyopen in new window
freednsfreednsexport FREEDNS_User="username"
export FREEDNS_Password="password"
freednsopen in new window的用户名密码
godaddygdexport GD_Key="123456"
export GD_Secret="abcdef"
https://developer.godaddy.com/keys/open in new window
yandexyandexexport PDD_Token="abcdef"https://tech.yandex.com/domain/doc/concepts/access-docpage/open in new window

更多dnsapi的使用,可以查看文档open in new window

(四)copy/安装 证书

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

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

格式例子如下:

acme.sh --install-cert -d xxx \
        --cert-file xxx \
        --key-file xxx \
        --fullchain-file xxx\
        --reloadcmd xxx

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

以nginx为例:

acme.sh --install-cert -d www.a.com -d img.a.com \
        --key-file   /etc/nginx/cert/domain.key  \
        --fullchain-file /etc/nginx/cert/domain.pem \
        --reloadcmd     "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

其它资料

  • [[Nginx配置SSL]]
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8