树莓派安装letsencrypt证书

之前VPS上一直用的是Let’s Encrypt的证书,除了偶尔有几次证书无法被电信识别以外,大部分时间下还是正常的。Let’s Encrypt证书有几个好处

  • 开源
  • 免费
  • 适合个人网站

虽然树莓派也分配了域名,也支持离线下载了,但问题是这一切都是建立在http协议基础上,为了保证自己信息的安全性,我有必要为树莓派安装letsencrypt证书。

安装certbot

certbot是letsencrypt安装证书的自动化工具。执行命令安装

1
sudo apt-get install certbot

系统会提示你,需要安装一些python的脚本。由于树莓派默认是安装了Python2以及Python3的最新版,所以不需要顾虑其他的因素。不像我的VPS是CentOS 6系统,装个Python3版本费尽周折还不成功,最后装回了Python2版本。

切记在证书安装前,需要关闭80以及443端口的程序。因为letsencrypt会用到这两个端口来更新证书。

然后我参考了以前VPS上安装证书的命令

1
sudo certbot certonly --standalone -d yourdomain

没想到报错

letsencrypt Timeout during connect (likely firewall problem)

经过一番查询之后发现,原来是电信封锁了80端口引起的。但创建证书跟80端口有什么关系呢?

letsencrypt获取证书的原理

原来我们在使用letsencrypt获取免费的https证书的时候,letsencrypt需要对域名进行验证,默认的验证方式是这样的

  1. certbot程序在web目录的根目录下放置一个文件
  2. letsencrypt服务器通过域名来访问这个文件,来验证你申请的域名是属于你的

而验证这个过程就是通过80端口来进行访问的,然而电信封锁了80端口,就会导致letsencrypt服务器访问不到该验证文件,于是就报上面的错。

DNS验证获取证书

既然80端口这条路走不通了,那还有别的办法获取证书吗?答案是有的,letsencrypt不光提供了一条路来获取证书,它还支持DNS验证来获取证书,具体步骤如下

首先在命令行输入命令

1
sudo certbot --manual --preferred-challenges dns certonly

系统会提示你输入域名并同意后,certbot会给你一个提示,例如

1
2
3
4
5
6
7
8
9
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

IMdfdsfsJDqBRyRaaEgPPQlEuvtxJQAgWZTIVbLuzDi8U

Once this is deployed,
-------------------------------------------------------------------------------

Press Enter to Continue

这个时候certbot会停止,等待我们去域名供应商去添加一条DNS记录

去域名供应商的DNS管理页面下,添加一条TXT记录,值是certbot提示给你的一串hash值。

值添加好之后,先别急着在certbot程序中按下Enter键,域名供应商需要一点时间来进行更新。可以在别的终端窗口里,使用命令来查看域名是否生效

1
dig -t txt _acme-challenge.example.com

如果能够看到那串hash值,说明域名生效,可以在certbot程序中按下回车键了。接下来就等着证书生成吧。

Nginx配置SSL证书

我的Nginx配置文件位于/etc/nginx/sites-available/default目录,打开Nginx配置文件

添加

1
2
3
4
5
6
7
8
9
10
server {
### 新增部分
listen 443 ssl default_server;
listen [::]:443 ssl default_server;

ssl on;
ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;
### 新增部分
}

重启Nginx,在路由器上配置NAT映射,映射端口443。庆幸电信没有封锁443端口。接下来看看你的网站是不是支持https协议了呢。

avatar

chilihotpot

You Are The JavaScript In My HTML