DNSPod配置Let’s Encrypt 通配符域名 SSL 证书

DNSPod配置Let’s Encrypt 通配符域名 SSL 证书

我的dns服务商是DNSPOD,所以选择的ACME客户端是bash类型的acme.sh(https://github.com/acmesh-official/acme.sh)。主要步骤如下:

1、安装 acme.sh
2、导入DNSPod密钥
3、生成证书
4、copy证书到Nginx
5、配置Nginx

安装acme.sh

执行安装命令

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

执行成功后会自动安装到:~/.acme.sh/

如果遇到以下错误提示,需要先安装 socat 依赖包 yum install socat -y 再执行安装命令。

[2020年 04月 10日 星期五 23:19:10 CST] It is recommended to install socat first.
[2020年 04月 10日 星期五 23:19:10 CST] We use socat for standalone server if you use standalone mode.
[2020年 04月 10日 星期五 23:19:10 CST] If you don't use standalone mode, just ignore this warning.

同时会自动为你创建 cronjob, 每天自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

导入DNSPod密钥

由于我是使用的是 DNSPod 解析服务,那就登录 DNSPod 官网生成所需的密钥。
然后执行导入命令:

export DP_Id="ID"
export DP_Key="Token"

ps:如果你用的是阿里的DNS解析,生成密钥步骤:

点击右上角头像 -> 选择 AccessKey -> 点击 开始使用子用户AccessKey -> 起个自定义名称 -> 搜索 NDS -> 选择 系统 AliyunDNSFullAccess

生成证书

执行以下命令

acme.sh --issue --dns dns_dp -d *.engineer-j.com

最后看到 Cert success 表示申请成功

证书会存放在 ~/.acme.sh/*.engineer-j.com/ 目录下

copy证书到Nginx

执行以下命令

acme.sh --installcert -d *.engineer-j.com \
--key-file       /opt/nginx/key.pem  \
--fullchain-file /opt/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

--installcert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.

目前证书在 60 天以后会自动更新,无需任何操作。

配置Nginx

server {
  listen 443;
  // ······
  // 修改证书路径
  ssl_certificate         存放证书的目录/cert名称.pem;
  ssl_certificate_key     存放证书的目录/key名称.pem;
  // ······
}

通过以上步骤域名就可以通过https来访问了。详细细节问题可以见 https://github.com/acmesh-official/acme.sh/wiki/说明,比如说如何更新acme、出错了怎么办......