配置 SSL, 方法及须知原理

什么是 SSL 证书

SSL 证书是数字证书,是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。
通俗一点, 就是包含了所使用的服务器的信息和公钥,这些信息是公开的。 而私钥是由证书申请者自己保存的,是保密的。

怎么配置呢

要在服务器要发送SSL证书,那么在服务器上配置。首先你得有一个证书
证书如何获取,我也是百度了很多,也有很多免费的网站,ssl for free, freessl.org, 但是发现证书没有.crt 文件,或者验证域名不方便。

这里先讲一下 SSL 证书包含的几个文件:

.key => 私钥
.csr => 公钥,让你的证书去认证的时,可以把它发送给权威机构认证。
.crt => 证书了

这里可以自己去体验一下用 OpenSSL 给自己生成一个证书。需自行安装 openssl 软件
openssl 给自己颁发证书的步骤

openssl 的证书既然是自己给自己颁发的,那么就不具有权威性,在连接时会向客户端提示不是安全的链接。也没有小绿锁。

最后我发现腾讯云有免费的证书可以用。
配置 SSL, 方法及须知原理

申请好证书之后, 如图
配置 SSL, 方法及须知原理
点击详情可以看到 指引文档, 里面的服务器配置方法就很全面了, 不管你是不是用它的证书,都可以按照这样去配。

了解一下 SSL 工作

我们知道,在客户端和服务器之间的请求,就是来回发送数据,普通的 HTTP 协议是没有对数据进行加密的,那么可能被第三方截取到你的请求,改变你们的通信数据或者冒充身份发送信息给你。 哇,突然感觉这些很常见 = =

HTTPS 就是一种安全的通信了,它会加密你的数据, 使第三方无法获取,并在建立通信的握手阶段,互相确认身份, 使别人无法冒充身份。 SSL 证书就是使用在 握手阶段,通过证书的信息,确认服务器身份。
具体如下:

配置 SSL, 方法及须知原理

详细讲解每一步就是:
第一步:客户端 say hello, 向服务端发送自己生成的 random 数,和自己支持的加密方法。

第二步:服务端接收消息后,又向客户端发送自己生成的 random 数、SSL 证书,确定使用的加密方法。

第三步:客户端读取证书信息,确认证书有效,然后自己再生成一个 random 数,并使用证书的公钥进行加密,发送给服务端。

第四步:服务端使用自己本地的私钥,解密获取客户端的随机数。

第五步:客户端和服务端使用这三个随机数生成 对话**, 用来加密接下来的对话过程。

可以看到下面英文有提到 session。 因为如果每次建立连接都去进行这五步,那么会很浪费时间。 所以这里有 sessionID 和 session ticket 两种。

session ID,记录有本次的握手存在,再次发送信息时,客户端发送该ID,服务器确认该编号存在,双方就不再进行握手阶段剩余的步骤,而直接用已有的对话**进行加密通信。

session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。session ticket是加密的,只有服务器才能解密,其中包括本次对话的主要信息,比如对话**和加密方法。当服务器收到session ticket以后,解密后就不必重新生成对话**了。