前言

  1. http 和 https 是什么?

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。

  1. SSL/TLS 是什么?

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。TLS:安全传输层协议 (TLS:Transport Layer Security Protocol)安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面.“ HTTP over SSL/TLS ”字面意思就是带“安全套接层”的 http 协议。其中 SSL 是“ Secure Sockets Layer ” 的缩写,是“安全套接层”的意思。 TLS 是 “Transport Layer Security” 的缩写,是 ” 传输层安全协议 ” 的意思。

  1. 为什么要部署 https?

说到底,就是 https 更安全。甚至为了安全,一个专业可靠的网站, https 是必须的。 Firefox 和 Chrome 都计划将没有配置 SSL 加密的 http 网站标记为不安全(貌似 Firefox 50 已经这么干了),目前它们也正在联合其他相关的基金会与公司推动整个互联网 https 化,现在大家访问的一些主要的网站。如 Google 多年前就已经全部启用 https ,国内的淘宝、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索结果也正在给予 https 的网站更高的排名和优先收录权。

  1. 怎么部署 https 呢?

你只需要有一张被信任的 CA ( Certificate Authority )也就是证书授权中心颁发的 SSL 安全证书,并且将它部署到你的网站服务器上。一旦部署成功后,当用户访问你的网站时,浏览器会在显示的网址前加一把小绿锁,表明这个网站是安全的,当然同时你也会看到网址前的前缀变成了 https ,不再是 http 了。

  1. 怎么获得 SSL 安全证书呢?

理论上,我们自己也可以签发 SSL 安全证书,但是我们自己签发的安全证书不会被主流的浏览器信任,所以我们需要被信任的证书授权中心( CA )签发的安全证书。而一般的 SSL 安全证书签发服务都比较贵,比如 Godaddy 、 GlobalSign 等机构签发的证书一般都需要20美金一年甚至更贵,不过为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt 提供的免费证书部署 https 了。那么怎么获得 Let’s Encrypt 安全证书,并且将它部署在自己的网站服务器上呢?

Let’s Encrypt 及 Certbot 简介

Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。而certbot则是官方发布的工具。

certbot使用教程

  • 登录官网https://certbot.eff.org,根据你的服务器和操作系统进行选择合适的版本,然后下面有两个选项,一个是automated(自动版)和advanced(高级版),本篇文章使用的是自动版。下载:
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
  • 对nginx进行配置
sudo ./path/to/certbot-auto --nginx

注意:如果你的nginx是通过源码编译安装的,要设置你的nginx配置文件的根目录,如下

sudo certbot-auto --nginx --nginx-server-root /usr/local/nginx/conf
  • 设置自动更新,因为证书只有90天的有效期
#测试
 sudo ./path/to/certbot-auto renew --dry-run
#如果测试成功,则可以把更新加入计划任务或者系统任务中
#我们就使用crontab -e的命令来启用自动任务,命令行:
sudo crontab -e
#添加配置:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
## 上面两行主要是设置环境变量 
##
30 2 * * 1 ./path/to/certbot-auto renew  >> /var/log/le-renew.log
#上面的执行时间为:每周一半夜2点30分执行renew任务。你可以在命令行执行./path/to/certbot-auto renew >> /var/log/le-renew.log看看是否执行正常,如果一切OK,那么我们的配置到此结束!