越来越多的人开始意识到 https 的重要性了,letsencrypt 证书免费而且兼容性好。在一般情况下都足够用。如果需要更高级别的证书可以考虑付费的。
首先,我这里的需求是前端有两台 web 服务器,前端有一台作为均衡负载。所以常规的使用域名作为验证的方法是不可行的,在看 acme.sh 时发现了它支持使用 DNS 作为验证。满足了我的要求。
安装 1 2 curl https://get.acme.sh | sh
安装完后 acme.sh 会被安装在~/.acme.sh 的目录下面.
dns认证 在安装目录的 dnsapi 目录下面 README.md 有认证方式,我使用了 dnspod 作为 dns 服务。在 dnspod 控制台申请到 id 和key后,在当前目录执行:
1 2 3 4 5 6 7 export DP_Id="1111" export DP_Key="111111111111111" acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com acme.sh --issue --dns dns_dp -d aaa.net -d *.aaa.net #泛域名支持
会在 .acme.sh 目录生成一个以域名为目录的证书目录
1 2 3 4 5 [Tue Mar 21 15:51:00 CST 2017] Your cert is in /home/pprt/.acme.sh/<domain>/<domain>.cer [Tue Mar 21 15:51:00 CST 2017] Your cert key is in /home/pprt/.acme.sh/<domain>/<domain>.key [Tue Mar 21 15:51:01 CST 2017] The intermediate CA cert is in /home/pprt/.acme.sh/<domain>/ca.cer [Tue Mar 21 15:51:01 CST 2017] And the full chain certs is there: /home/pprt/.acme.sh/<domain>/fullchain.cer
部署 acme.sh 提供了一个接口用来部署证书,也就是我们需要将生成的证书拷贝到指定的服务器,实例如下
1 2 acme.sh --deploy -d example.com --deploy-hook cpanel
服务器上使用了 ansible 作为管理 所以需要将文件使用 ansible 复制到其他机器上指定的文件夹
在 deploy 文件夹下面 创建一个 ansible.sh 的文件,里面添加如下代码,将文件拷贝到指定的服务器。 其中 _cert_dir 为服务器上保存证书的目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ansible_deploy() { _cdomain="$1" _ckey="$2" _ccert="$3" _cca="$4" _cfullchain="$5" _debug _cdomain "$_cdomain" _debug _ckey "$_ckey" _debug _ccert "$_ccert" _debug _cca "$_cca" _debug _cfullchain "$_cfullchain" _cert_dir=/Code/sslCert/ ansible olweb -m file -a "path=$_cert_dir/$c_domain state=directory " --become ansible olweb -m copy -a "src=$_cfullchain dest=$_cert_dir/$_cdomain/cert.cer" ansible olweb -m copy -a "src=$_ckey dest=$_cert_dir/$_cdomain/cert.key" ansible olweb -m command -a "service openresty force-reload" --become # _err "deploy cert to nginx server, Not implemented yet" return 0 }
在执行deploy后,会制动添加一个 crontab
1 2 33 0 * * * "/home/pprt/.acme.sh"/acme.sh --cron --home "/home/pprt/.acme.sh" > /dev/null
如果设置有多个域名,只会部署第一个,需要在crontab添加一个-f
的参数
参考 acme.sh github
acme.sh wiki
acme.sh dnsapi
acme.sh deploy