前言

https相比http安全的多,迁移https是众多网站的大趋势。自从let's encrypt成立以后,可以申请免费的证书后,https的普及度越来越高了。在网上很容易就可以找到各种关于let's encrypt证书申请的教程和server的配置方法。

let's encrypt的证书只有90天有效期,官方希望网站用户能够定期更新自己的证书,以保证安全性,另一方面,也能够确保所有者对域名的持有状态。

目前let's encrypt支持申请通配证书,即一个证书可以支持全部的子级域名,但是并不支持更深级的域名。另外,通配域名证书内不能够再包含其他域名。比较不便的是对于根级域名,是不包含在通配域名中的。即申请一个通配域名证书*.mypal.wang,可以支持a.mypal.wang、b.mypal.wang等域名,但是不支持a.b.mypal.wang及mypal.wang。而申请非通配域名证书的话,一个证书可以包含多个域名。由于本站子级域名并不多,为了方便配置nginx,选择申请了非通配域名证书。

证书申请验证支持两种方式,一种是在域名指定路径中存放一个由工具生成的校验文件,一种是为域名dns配置一条txt记录,设置指定的内容。本站申请使用了第一种方式。

申请步骤

certbot安装

let's encrypt为证书申请过程制定了一套acme协议,实现了该协议的工具有很多,官方推荐certbot,其官网为https://certbot.eff.org/
这里附上Ubuntu16.04的安装脚本

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

证书申请

安装好certbot后,可以通过命令certbot --version确认是否安装成功,及其版本号。

# 创建server静态目录
mkdir ~/www
# docker创建nginx容器,映射80端口,将静态目录进行关联
docker run --name letsencrypt \
	-p 80:80 \
	-v ~/www:/usr/share/nginx/html:ro -d nginx
# certbot申请证书,使用-d参数可以指定多个域名
sudo certbot certonly --webroot \
	-w ~/www \
	-d mypal.wang -d www.mypal.wang
# 查看申请成功的证书
ls -l /etc/letsencrypt/live/
# 证书申请成功后,停止并删除nginx容器
docker container kill letsencrypt
docker container rm letsencrypt

certificate

证书更新

90天证书到期后,使用命令renew更新证书。为方便起见,可以使用crontab设定定时任务(具体方法后续补充)。

certbot renew