https://zhuanlan.zhihu.com/p/377191119 Authentication Credential Management Extension
环境介绍:
服务器:阿里云
DNS解析: dnspod
操作过程如下:(以下操作过程建议在root下执行)
1.下载脚本并执行安装
wget -O - https://get.acme.sh | sh
此时会执行一些东西,在/root/目录下会创建.acme.sh目录,并且生成一些文件,相当于在服务器上安装了一个客户端
并且,这个时候在系统的cron里面会添加一个命令,定时更新证书用的:
所以这个脚本程序比较人性化的一点体现出来了。
2.接着去dnspod申请API并保存
登录dnspod后台,进入菜单--【用户中心】--【安全设置】,点击右侧的"创建API Token",这里名称随意命名即可。
注意提示信息:仅仅在创建的时候显示一次,所以,如果怕忘记或者在执行本篇文章介绍的过程中出错,建议把ID和token记录下来,比如记事本之类。
3.正式进入申请证书的整个流程的准备环节,在shell环境下分别输入:
export DP_Id="62100"
export DP_Key="f4d4b2a300fb1b92b32e8d13e7ddb777"
这里 id 和 token 请换成你申请的值
4.开始申请签发证书
./acme.sh --issue --dns dns_dp -d chaihongjun.me -d *.chaihongjun.me --debug --ocsp
-d 指代域名,可以有多个 -d 参数,所以,后面又跟了一个通配符域名,以上域名请换成你所需要的。整个命令执行需要一段时间,最后会有一个120秒的等待。等最后出现success字样,就表示签发成功了。签发成功之后会在/root/.acme.sh/生成一个目录,这个目录的名称就是你申请的域名:
这个目录下就有申请的证书文件和密钥文件:
既然已经签发成功了,之前去改nginx配置即可,引用这个目录下的文件就好了。打住!官网有一段说明很重要(https://github.com/Neilpang/acme.sh/wiki/说明)
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,
这就牵出了后面的证书安装过程(其实是复制证书文件到其他地方,通过它给的installcert命令可以保证可以自动更新升级,如果是我们手动cp,则无法后续的续订证书)
5.安装证书(复制证书)
./acme.sh --installcert -d chaihongjun.me -d *.chaihongjun.me
--cert-file /etc/letsencrypt/acme/chaihongjun.me.cer
--key-file /etc/letsencrypt/acme/chaihongjun.me.key
--ca-file /etc/letsencrypt/acme/ca.cer
--fullchain-file /etc/letsencrypt/acme/fullchain.cer
--reloadcmd "service nginx force-reload"
以上命令是把对应域名的证书文件都丢到/etc/letsencrypt/acme/里面去了,并且让nginx重新加载配置。
6.最后一个步骤是配置nginx
需要注意的是有这几个配置,除了密钥,其他引入的都是fullchain:
ssl_trusted_certificate /etc/letsencrypt/acme/fullchain.cer;
ssl_certificate /etc/letsencrypt/acme/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/acme/chaihongjun.me.key;
然后如果使用了pagespeed,则这两个很重要:
pagespeed SslCertDirectory /etc/letsencrypt/acme;
pagespeed SslCertFile /etc/letsencrypt/acme/fullchain.cer;
至此,整个安装配置过程都完成了,然后就可以撒手不管它自动续期(60天周期)
关于其他内容:
注意:
如果第一个步骤就提示下载失败error之类的,那么请确认系统是centos6.5版本,如果是这样的情况,有两种解决方案:
1. 执行curl命令的时候指定 tsl版本 curl --tlsv1 https://get.acme.sh | sh
2. 将 get.acme.sh 内容下载并添加参数 --no-check-certificate
#!/usr/bin/env sh
#https://github.com/Neilpang/get.acme.sh
_exists() {
cmd="$1"
if [ -z "$cmd" ] ; then
echo "Usage: _exists cmd"
return 1
fi
if type command >/dev/null 2>&1 ; then
command -v $cmd >/dev/null 2>&1
else
type $cmd >/dev/null 2>&1
fi
ret="$?"
return $ret
}
if _exists curl && [ "${ACME_USE_WGET:-0}" = "0" ]; then
curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
elif _exists wget ; then
wget --no-check-certificate -O - https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
else
echo "Sorry, you must have curl or wget installed first."
echo "Please install either of them and try again."
fi
如果上述方法均不可行,可以参照 https://github.com/Neilpang/acme.sh/issues/1439 贴出的方法,手动安装