16 HTTPS 当家做主
更新时间:2020-01-16 20:32:15
世上无难事,只要肯登攀。——毛泽东

前言

上一篇文章中,我们简单的介绍了加密相关的基础概念,这些内容是理解HTTPS的基础。我们在这篇文章中就给大家展示一下HTTPS是如何通过加密算法来保证通信的安全,以及在Nginx中如何部署一个HTTPS网站。

TLS/SSL加密

互联网加密通信协议的历史,是伴随着互联网产生和发展的。
最开始,网景公司NetScape设计了SSL(Secure Sockets Layer)协议1.0版本,但是该版本并未发布。
接着,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
真正得到大规模普及使用的是SSL 3.0版。
随着互联网对安全性能的要求越来越高,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版 TLS1.0(Transport Layer Security)版。
2006年和2008年,TLS进行了两次重大升级,分别为TLS 1.1TLS 1.2
TLS 1.0通常被标示为SSL 3.1TLS 1.1SSL 3.2TLS 1.2SSL 3.3。所以我们可以认为TLSSSL是相同的,只不过二者的对应的版本号不一样而已。
HTTPS就是使用了TLSHTTP,可以保证我们传输的信息安全。

HTTPS加密流程

HTTPS使用TLS/SSL进行加密。在真正进行通信之前,客户端和服务器会进行三次通信(类似TCP的三次握手),用于协商后续通信过程中使用的加密算法。我们简单的介绍一下:

  • 第一回合:客户端向服务器发送一个请求,这个请求有一个专业的名称叫做ClientHello,顾名思义,这是客户端向服务器打招呼呢。客户端会告诉服务器自己支持哪些加密算法,支持的加密协议版本,并且会发送给服务器一个随机数(记住这个随机数,它是用来生成密钥的)。

  • 第二回合:服务器收到客户端的ClientHello请求之后,要非常礼貌的回一句Hello,这就是ServerHello。服务端会看一下和客户端支持的协议版本是否相同,然后确定加密算法,并且给客户端发送一个随机数(记住:这是第二个随机数)。最重要的是,服务端会把自己的证书发送给客户端。

  • 第三回合:客户端收到服务端的服务端的证书之后,会验证证书是否是真实的(大家真的不用关心如何验证,我们不用关心)。然后再次给服务器发送一个随机数。(划重点了:这是第三个随机数)

  • 第四回合:这是服务器发送给客户端的最后一个消息(协商阶段的最后一个消息),这个消息中包含了前两次服务器发送给客户端的所有内容的hash值。

到此为止,双方协商的阶段就结束了。客户端和服务器都可以通过上面说过的三个随机数来生成一个密钥,随后的所有通信都是使用密钥进行加密传输了,具体的流程就和HTTP通信的流程相同了。

Nginx如何配置HTTPS

第一步:编译Nginx
如果我们想使用Nginx提供HTTPS服务,那么我们必须在编译Nginx的时候支持SSL功能。通过-V命令可以查看Nginx编译时候使用的参数。
图片描述
可以看到我们之前编译的Nginx并没有包含SSL功能,所以我们要重新编译Nginx
图片描述
紧接着makemake install就行了。

第二步:生成证书
大家可以使用openssl生成一对证书,这个过程就不再说了,可以借助搜索引擎查询。
图片描述

第三步:配置conf文件
图片描述
第五步:启动Nginx
常规启动Nginx就可以访问HTTPS了。

总结

这一章节原理性东西偏多,大家要仔细理解SSL通讯过程。

}