还记得之前写过了一篇文章《服务器使用certbot安装SSl证书》,那篇文章介绍的是使用certbot客户端程序来安装免费的证书,整个过程操作其实算不上繁琐,但是需要自己去打理的东西挺多的,比如续订证书文件的脚本等。而且,对于有很多的域名有点不方便使用(执行命令要输入很长),如果要增加新的域名,还得重新走一遍更新过程(输入很长的执行命令),只是执行续订脚本无法对新域名起作用。这里结合acme.sh这个脚本以及如何去申请域名通配符的方法真正做到了一劳永逸:再新增域名网站的时候,只要改造一下nginx的配置就可以,无需再去执行申请脚本的动作。
环境介绍:
server os:aliyun centos
dns parsing service provider: 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天周期)
关于其他内容:
证书会60天周期自动更新续订
acme.sh本身也要更新的,可以手动 ./acme.sh --upgrade 到最新版,也可以自动升级 ./acme.sh --upgrade --auto-upgrade,以及关闭 ./acme.sh --upgrade --auto-upgrade 0
注意:
如果第一个步骤就提示下载失败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 贴出的方法,手动安装