HTTPS Certbot

CA认证

采用https的服务器必须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。 CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。 如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。 但是申请证书是收费的(按年),少则一两千,多则七八千。

Let’s Encrypt

Let’s Encrypt 是 一个叫 ISRG ( Internet Security Research Group ,互联网安全研究小组)的组织推出的免费安全证书计划。参与这个计划的组织和公司可以说是互联网顶顶重要的先驱,除了前文提到的三个牛气哄哄的发起单位外,后来又有思科(全球网络设备制造商执牛耳者)、 Akamai 加入,甚至连 Linux 基金会也加入了合作,这些大牌组织的加入保证了这个项目的可信度和可持续性。

使用Certbot自动化地获取、部署、更新安全证书 - 图1

尽管项目本身以及有该项目签发的证书很可信,但一开始 Let’s Encrypt 的安全证书配置起来比较麻烦,需要手动获取及部署。存在一定的门槛,没有一些技术底子可能比较难搞定。官网地址:https://letsencrypt.org/ ## Certbot 后来 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。所以就可以直接使用官方客户端。 官网地址:https://certbot.eff.org/,打开这个网站,显示出上页面的两个选择框,I’m using和on。

使用Certbot自动化地获取、部署、更新安全证书 - 图2

根据实际使用的软件,和操作系统进行选择,不同的系统,有不同的安装方式,以下用的是CentOS7.3和Nginx,选择如下图:

使用Certbot自动化地获取、部署、更新安全证书 - 图3

选择后,下面会出现安装步骤

使用Certbot自动化地获取、部署、更新安全证书 - 图4

按照步骤操作即可,安装certbot后,可以生成证书让certbot自动配置nginx,也可以只生成证书,自己手动修改nginx配置。

安装系统对应的Web服务器

  1. sudo yum install certbot python2-certbot-nginx

证书生成

从源码安装的Nginx需要添加相关软链接才能被Certbot找到

  1. # Nginx可执行程序的连接至/usr/local/bin/nginx
  2. ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
  3. # Nginx的配置文件链接
  4. ln -s /usr/local/nginx/conf/ /etc/nginx

①生成证书并修改Nginx配置

  1. sudo certbot --nginx

②生成证书,不修改Nginx配置

  1. sudo certbot certonly --nginx
输入A同意:它会在letsencrypt这个网站上注册账号。然后下一步:

使用Certbot自动化地获取、部署、更新安全证书 - 图5

使用Certbot自动化地获取、部署、更新安全证书 - 图6

使用Certbot自动化地获取、部署、更新安全证书 - 图7

然后会列出来nginx里配置的域名,填入需要生成哪个域名的证书,输入对应的数字序号,回车

使用Certbot自动化地获取、部署、更新安全证书 - 图8

有两个选项,1 是不需要重定向,2 重定向。意思就是说,当客户端访问http的时候是否重定向到https。如果系统只允许访问https接口,选2即可。输入2回车。 打开nginx的配置文件看看:

使用Certbot自动化地获取、部署、更新安全证书 - 图9

这是certbot生成的证书,按照这个路径可以找到对应的证书文件。 另外 letsencrypt证书的有效期是90天,所以90天需要更新一下证书,更新证书也是可以自动更新的,输入命令:
  1. sudo certbot renew --dry-run
Certbot 会帮启动一个定时任务,在证书过期时自动更新。

使用Certbot自动化地获取、部署、更新安全证书 - 图10

如果只想生成证书,Nginx 配置中并没有此域名。可以使用一行代码搞定:
  1. certbot certonly --cert-name example.com
Certbot 会启动一个临时服务器来完成验证(会占用80端口或443端口,因此需要暂时关闭 Web 服务器),然后 Certbot 会把证书以文件的形式保存,包括完整的证书链文件和私钥文件。 不同的系统,不同的软件,安装命令也不尽相同,直接参照官方文档操作