树莓派安装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需要对域名进行验证,默认的验证方式是这样的
- certbot程序在web目录的根目录下放置一个文件
- letsencrypt服务器通过域名来访问这个文件,来验证你申请的域名是属于你的
而验证这个过程就是通过80端口来进行访问的,然而电信封锁了80端口,就会导致letsencrypt服务器访问不到该验证文件,于是就报上面的错。
DNS验证获取证书
既然80端口这条路走不通了,那还有别的办法获取证书吗?答案是有的,letsencrypt不光提供了一条路来获取证书,它还支持DNS验证来获取证书,具体步骤如下
首先在命令行输入命令
1 | sudo certbot --manual --preferred-challenges dns certonly |
系统会提示你输入域名并同意后,certbot会给你一个提示,例如
1 | ------------------------------------------------------------------------------- |
这个时候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 | server { |
重启Nginx,在路由器上配置NAT映射,映射端口443。庆幸电信没有封锁443端口。接下来看看你的网站是不是支持https协议了呢。