76 让站点使用https安全加密访问之自动更新证书 - xiaoxin01/Blog GitHub Wiki

之前有一篇文章介绍如何在线申请ssl证书,见让站点使用https安全加密访问,这种方式的特点是简单,按照向导就可以生成证书,但是证书过期需要再次重新申请及更新证书。

本文介绍如何用getssl工具申请证书及自动更新证书。

安装GetSSL

打开bash,执行:

curl --silent https://raw.githubusercontent.com/srvrco/getssl/master/getssl > getssl ; chmod 700 getssl

这条命名下载脚本并添加脚本的执行权限。

初始化配置文件

对于要申请证书的domain,使用 -c 命令创建一个默认的配置文件:

./getssl -c www.supperxin.com

这条指令会生成如下内容:

~/.getssl
~/.getssl/getssl.cfg
~/.getssl/www.supperxin.com
~/.getssl/www.supperxin.com/getssl.cfg

/.getssl/getssl.cfg文件为默认配置,/.getssl/www.supperxin.com/getssl.cfg文件为domain的配置,在domain的配置中没有声明的内容,会读取默认配置。

配置domain的配置文件

~/.getssl/www.supperxin.com/getssl.cfg为domain的配置,主要修改如下内容:

取消#CA="https://acme-v01.api.letsencrypt.org"的注释,配置证书服务器为正式服务器。

配置多个Domain

如果有多个domain需要申请,则配置SANS字段,用逗号隔开,比如SANS="cdn.supperxin.com"

配置所有权认证

配置ACL字段,需要将其配置到网站路径下,以便getssl服务可以通过此路径验证网站所有权。

需要注意的是,这个字段需要对应SANS字段,第一行为主domain(www.supperxin.com)的认证位置,其后每一行为SANS中配置的位置。本文需要认证www.supperxin.com,cdn.supperxin.com,所以需要配置两行:

ACL=('/var/www/www.supperxin.com/web/.well-known/acme-challenge'
     '/var/www/www.supperxin.com/web/.well-known/acme-challenge')

其中 /var/www/www.supperxin.com/web/ 为网站的根目录。

配置Nginx

ACL生成的内容需要配置Nginx,以便可以从Web访问到,在Nginx的配置文件中添加:

location /.well-known/acme-challenge/ {
        root /var/www/www.supperxin.com/web/;
        add_header Content-Type text/plain;
}

配置好之后,运行

service nginx reload

然后可以在/var/www/www.supperxin.com/web/.well-known/acme-challenge/目录下添加一个测试文件试试看从Web是否可以直接访问到。

生成证书

都配置好以后,只需要执行:

./getssl www.supperxin.com

就会在~/.getssl/www.supperxin.com/目录下生成私钥和证书。

配置corn自动更新证书

getssl -a可以直接更新所有的证书,利用linux的corntab可以实现每个月更新一次:

23  5 1 * * /path/to/getssl -u -a -q

参考: