Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用。
证书签发工具有很多,certbotacme.sh等,本文仅介绍Dockercertbot的方式作为演示。
域名解析提供商使用Cloudflare,它提供免费的CDN服务,将域名服务商改为Cloudflare,点击这里

安装docker

以Debian系Linux为例,其他请参照官方文档

1
2
apt-get update
apt-get install -y docker.io

获取Cloudflare的API密钥

  1. 登录Cloudflare并进入控制台

  2. 选择你需要签发证书的域名

  3. 右边API区域,点击获取您的API令牌

  4. API令牌页面,点击查看Global API Key,记下Key

创建Cloudflare密钥文件

新建文件cloudflare.ini,内容如下:

1
2
dns_cloudflare_email = aaa@bbb.cc #你的Cloudflare邮箱
dns_cloudflare_api_key = cem3h493icrvs7kkpck989i9j7j5oq28 #你的Global API Key

首次签发证书

cloudflare.ini文件同目录下,运行certbot容器进行证书签发。
-m替换为你的邮箱,-d替换为你需要签发的泛域名,如我的命令为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run -it --rm --name certbot \
    -v "./letsencrypt:/etc/letsencrypt" \
    -v "./lib:/var/lib/letsencrypt" \
    -v "./log:/var/log/letsencrypt" \
    -v "./cloudflare.ini:/cloudflare.ini" \
    certbot/dns-cloudflare certonly \
    --dns-cloudflare-credentials /cloudflare.ini \
    --dns-cloudflare-propagation-seconds 60 \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -m aaa@bbb.cc -d "*.sssn.cc"

等待镜像的下载,和命令的执行成功后,在以下路径就能看到证书了:

1
2
3
4
5
6
7
8
cloudflare.ini
letsencrypt
 |-- archive
     |-- sssn.cc
         |-- cert1.pem
         |-- chain1.pem
         |-- fullchain1.pem
         |-- privkey1.pem

续签证书

cloudflare.ini文件同目录下,运行以下命令即可续签

1
2
3
4
5
6
docker run -i --rm \
    -v "./letsencrypt:/etc/letsencrypt" \
    -v "./lib:/var/lib/letsencrypt" \
    -v "./log:/var/log/letsencrypt" \
    -v "./cloudflare.ini:/cloudflare.ini" \
    certbot/dns-cloudflare renew

命令执行成功后,在以下路径就能看到续签证书了,后缀为2,再次续签成功后为3,以此类推:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
cloudflare.ini
letsencrypt
 |-- archive
     |-- sssn.cc
         |-- cert1.pem
         |-- cert2.pem
         |-- chain1.pem
         |-- chain2.pem
         |-- fullchain1.pem
         |-- fullchain2.pem
         |-- privkey1.pem
         |-- privkey2.pem