在点滴中成长

【原】用Let`s Encrypt架构HTTPS服务

生命不止,奋斗不息。 --卡莱尔


经过几年的发展,Let's Encrypt越来越完善,使用起来更加方便,同时近期也将支持泛域名签发证书,所以今天我便再一次倒腾Let's Encrypt,顺便更新下博客,希望给大家带来帮助!

HTTPS相比于HTTP其安全性得到了大大的提高,但是相比于HTTP而言HTTPS的需要密钥证书,在不久之前,免费的证书还是很难寻找的,最常用的便是“沃通”免费证书。但是“沃通”的免费证书对于浏览器并没有那么友好,而且有不少人都主动的屏蔽“沃通”的证书。令人欣喜的是,一个免费的开源证书颁布机构产生啦,那就是Let's Encrypt。但是它和寻常的HTTPS证书不一样,它并没有直接提供证书,而是提供一段脚本,让你自己去生成证书,这就提高了使用门槛,所以便有了这篇博客~也是给自己留个备忘。

在教程开始之前,你需要注意的是:

  1. 本教程只针对Nginx服务器。
  2. 本教程使用的是Centos7的操作系统环境。
  3. Let`s Encrypt生成的证书有效期只有3个月,需要不断的重新签署。

安装前的准备工作:

  1. 你得有个服务器
  2. 准备一个可用的域名
  3. 拥有一定的Nginx服务器知识

开始安装:

这次我将提供两种方式安装使用Let's Encrypt,值得注意的是两种方式都是基于shell的,同时我没有使用官方不推荐的web服务器插件的方式,我们将使用Let's Encrypt签发相关证书,随后自己配置web服务器,最终实现https访问。在获得证书后,如何配置当前服务器,请自行百度解决。

  • 使用官方推荐的certbot脚本完成相关配置

a.访问网站根据自己的系统及其web服务器选择相关脚本
b.使用相关命令安装脚本(nginx+centos7: sudo yum install certbot-nginx)
c.配置及其相关异常:

Q1:No module named 'requests.packages.urllib3'
请使用 (pip install requests urllib3 --force --upgrade)升级urllib3版本既可解决。
Q2:ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
请使用 (pip uninstall pyOpenSSL; pip install pyOpenSSL==16.2.0) 安装16.2.0版本的pyOpenSSL才可以,最新的17.0还是会出现报错

d.命令使用
成功安装了脚本,现在可以使用相关的命令进行证书签发。

certbot certonly --cert-name zxblog(这是一个别名,再重签的时候可以使用这个,就不需要长长的配置了) -d zxblog.our-dream.cn

接下来按照提示完成邮箱,协议同意等操作,即可签发相关证书。

a.安装脚本

curl  https://get.acme.sh | sh

更多安装方式请参考:https://github.com/Neilpang/acme.sh/wiki/How-to-install

b.签发证书【这里使用阿里云DNS的方式认证】

acme.sh --issue --dns dns_ali -d zxblog.our-dream.cn

更多签发方式请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

DNS方式可以使用DNS供应商的API来实现自动验证,我使用的是阿里云API,更多的DNS供应商配置请参看:https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

c.复制/安装证书

acme.sh --install-cert -d zxblog.our-dream.cn \
--key-file       /path/to/zxblog.our-dream.cn/key.pem  \
--fullchain-file /path/to/zxblog.our-dream.cn/cert.pem \
--reloadcmd     "nginx -s reload"

d.第一次安装记得修改nginx的配置文件,生效HTTPS证书,以后将不用再修改,直接重新加载即可!

Tips:

使用HTTPS也会带来不少的困扰,典型的就是在网页中使用的外部资源也必须是HTTPS协议的资源,不然很可能加载不成功,这就导致了我们很多外部插件不可以使用,或者使用起来不方便,例如:畅言第三方评论、百度统计、百度自动站点提交以及很多开源CDN前端库等等。然而对于我这个小博客而言,这些显然都不是问题~

最后说两句:没有绝对的配置方法,只要能够配置成功就是好方法,我也是在不断的摸索和尝试中前行,如果您在使用中发现了当前方法的BUG或者有更好的方法也欢迎留言。总之,让自己的网站安全起来!