申请并配置 Let’s Encrypt 的免费 SSL 证书

  前一段因为网络原因,导致国内 HTTPS 无法访问我的博客,折腾了好一阵,顺手整理一下申请并配置 Let’s Encrypt 免费 SSL 证书的操作步骤,使用环境为 Ubuntu 17.10 + Nginx。

0. 配置 DNS

  首先需要配置 DNS,建立一条 A 记录,将要使用的域名指向服务器 IP,具体方法因 DNS 服务提供商不同而有所差异,一般服务提供商都会提供便捷的网页管理界面,如 DNSPod 配置如 图1:

图1

图1

  后续示例使用的域名为 test.nex3z.com。

1. 安装并配置 Nginx

  为了尽可能完整地进行说明,这里从安装 Nginx 开始。

1.1. 安装 Nginx

  安装 Nginx 非常简单,执行如下命令即可:

1.2. 配置 ufw

  如果启用了 ufw,需要配置防火墙允许 Nginx 的 HTTPS 流量:

  如果之前启用过 Nginx HTTP,就可以删掉它了:

1.3. 配置 Nginx

  进入 Nginx 配置目录

复制一份默认配置,命名为 test,并进行编辑:

在其中找到 server_name一行:

将其中的 _ 替换为域名,即 test.nex3z.com:

如果有多个域名,域名间以空格分隔。

  保存 test 配置文件后,将其连接至启用站点目录:

然后删除默认站点配置:

  使用如下命令检查配置文件正确性:

配置文件无误后,重启 Nginx:

  此时访问 http://test.nex3z.com/,应该可以看到 Nginx 的默认页面。

2. 申请并配置 Let’s Encrypt 的 SSL 证书

2.1. 安装 CertBot

  使用 CertBot 可以非常方便快捷地申请和配置 SSL 证书,在官网可以看到任意服务器和操作系统组合的配置方法。这里还是以 Ubuntu 17.10 + Nginx 为例,依次执行如下命令安装 cerbot:

2.2. 申请并配置证书

  然后只需一条命令即可完成申请和配置的整个过程:

  cetbot 首先需要输入一个邮件地址,用于紧急续期和通知:

  同意协议后,会询问要申请的域名:

  输入数字选择域名即可,这里输入1。之后开始获取证书并校验,校验成功后,会提示选择是否要把 HTTP 流量重定向到 HTTPS,可根据实际需要选择:

这里选择 2,将 HTTP 流量重定向到 HTTPS,回车确认后,即大功告成:

  访问 https://test.nex3z.com/,应该可以看到 Nginx 的默认页面了。

2.3. 检查服务器配置

  此时再看服务器配置:

可以看到 Certbot 自动添加了如下内容:

这里监听了 443 端口,并配置了秘钥位置,然后检查 scheme,将非 HTTPS 流量通过 301 重定向到 HTTPS。如果需要同时保留 HTTP 和 HTTPS 访问,删掉 if ($scheme != "https") 一段即可。

3. 自动续租

  Let’s Encrypt 的证书有效期为 90 天,Certbot 提供了一个 Cron 任务进行自动续租。

  首先检查一下自动续租功能是否正常:

该功能会在有效期小于30天时进行续租,否则不进行任何操作。如果没有报错,编辑 crontab:

在其中加入:

即在每天凌晨 2 点 30 分检查证书情况并自动续租。如果服务器时区和本地时区不同,注意需要换算一下时间,避免在本地高峰期进行续租。