▌写在前面

  前几天看了一篇文章,标题为“网站开战的第三步棋。”

  其实不只是Google,在WWDC 2016上,苹果在发布iOS 9的同时也向开发者传递了一个消息,那就是到2017年1月1日时App Store中所有应用都必须启用 App Transport Security应用程序安全传输协议,从而提升应用和系统安全性。不过后来苹果在其开发者网站上表示将延长该规定的截止日期,以便给开发者更多的时间做好切换工作。

  但是种种迹象表明,全面启用势在必行。

  ▌

  我们现在的生活已经离不开互联网了,当我们浏览网页、网上购物的时候数据都是基于HTTP协议进行传输的。

  协议不适合传输一些敏感信息,比如信用卡号、密码等。

  因为是明文传输的,通过 。

.

  依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

   机构颁发的安全签章来查询。

  ▌CA认证

  采用)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。

  CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

  如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。

  但是申请证书是按年收费的,少则一两千,多则七八千。但有些公司就是不愿意花钱,还有一些个人网站更不愿意花钱了。

  以上简单介绍了下基础知识,下面开始本文的重点,教你如何生成可靠的并且免费的证书。

  ▌Let’s Encrypt

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

  官网地址:/

  尽管项目本身以及有该项目签发的证书很可信,但一开始 Let’s Encrypt 的安全证书配置起来比较麻烦,需要手动获取及部署。存在一定的门槛,没有一些技术底子可能比较难搞定。

  ▌Certbot

  后来 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。这真是非常容易、方便呀,所以我们就可以直接使用官方客户端。

  我们打开官网,选择如下图:

  选择后,下面会出现安装步骤,按照步骤操作就可以了。安装Cerbot后,可以生成证书让Cerbot自动帮你配置Nginx,也可以只生成证书,自己手动修改Nginx配置。

  sudo yum install certbot-nginx

  提示安装完成后,执行第二步生成证书:

  sudo certbot --nginx

  如果你运气好的话会很顺利地生成证书,如果不顺利的话则会出现错误,这些错误都是你服务器缺少包导致。咱们先说顺利的情况:

  输入你的邮箱地址,这样当证书过期的时候,它会给你发邮件提醒你。输入邮箱后回车,下一步:

  输入A同意:它会在letsencrypt这个网站上帮你注册账号。然后下一步:

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

  有两个选项,1 是不需要重定向,2 重定向。意思就是说,当客户端访问即可。

  输入2回车,OK,大功告成。这时候Certbot已经帮你重启了Nginx,你只需调用接口测试即可。我写的较详细,其实熟练的话一分钟就搞定了。

  我们打开nginx的配置文件看看:

  这是Certbot生成的证书,按照这个路径可以找到对应的证书文件。

  另外letsencrypt证书的有效期是90天,所以90天需要更新一下证书,更新证书也是可以自动更新的,输入命令:

  sudo certbot renew --dry-run

  Certbot会帮你启动一个定时任务,在证书过期时自动更新。

  还有,如果你只想生成证书怎么办?Nginx配置中并没有此域名。同样一行代码搞定:

  certbot certonly --cert-name example.com

  Certbot 会启动一个临时服务器来完成验证(会占用80端口或443端口,因此需要暂时关闭 Web 服务器),然后 Certbot 会把证书以文件的形式保存,包括完整的证书链文件和私钥文件。