我的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、出错了怎么办......