2020-heibaiying-HTTPS
HTTPS
一、基本概念
1.1 SSL
SSL(Secure Sockets Layer,安全套接层)是一种安全协议,目的是为互联网通信提供安全保障,最早由网景公司(Netscape)推出。
v1 版本因为存在严重的安全漏洞,所以从未公开过。v2 版本在1995 年2 月发布,但因为存在多个严重的安全漏洞而被v3 版本替代。v3 版本在1996 年发布,由网景公司全部进行重新设计。
1.2 TLS
1.3 OpenSSL
1.4 HTTPS
HTTPS (Hyper Text Transfer Protocol over SecureSocket Layer,超文本传输安全协议)是在

二、数据安全
具体而言,
2.1 非对称加密
非对称加密算法需要一对密钥:公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)来进行加解密。用公钥加密的数据只有对应的私钥才能解密,反之亦然。因为加密和解密使用的是两个不同的密钥,从而叫作非对称加密算法。

2.2 对称加密
非对称加密算法通常是基于一些复杂的数学问题来实现的,因此其加解密过程需要大量的运算,对应的加解密时间也比较长。为了兼顾性能与安全两方面的考虑,
对称加密算法采用同一个密钥来进行信息的加密和解密,因此也被称为单密钥加密算法,其加解密速度都比较快。

2.3 摘要算法
通过以上两步,在网络中传输的数据已经是密文,此时即便数据被窃取,窃取者也无法解析。但是窃取者仍然可以对密文进行截取和重发,进而改变用户预期的行为,此时需要引入摘要算法来对数据的完整性进行校验。
摘要算法是一种单向的,不需要密钥的算法,它可以将任意长度的输入转换为固定长度的输出。并且能够保证对于任意相同的输入在同样的摘要算法下总是输出相同的结果;反之,如果输入不相同,则采用相同摘要算法得到的结果必然不相同。

2.4 数字签名
当服务器处理完客户端的请求后,需要将处理结果返回给客户端。此时服务器需要证明这些返回数据是由真正持有私钥的服务器返回的,而不是其它伪装服务器返回的。想要保证这一点,需要使用服务器独有的私钥对数据进行加密,这种行为也称为数字签名。
由于非对称性加密比较耗时,因此只会对返回数据的摘要进行加密。当客户端收到服务器的响应时,首先尝试使用公钥对加密后的摘要进行解密,如果解密失败,则表示是其他伪装服务器返回的;如果解密成功,则继续对数据的完整性进行校验。

2.5 中间人攻击
经过以上步骤,数据的传输已经相当安全了,但此时还是无法抵御中间人攻击:

简单来说,中间人攻击就是服务器传递给客户端的公钥可能被攻击者替换,进而丧失数据安全的一种攻击方式:
- 首先,中间攻击者将服务器发送给客户端的公钥替换为自己的公钥;
- 假设没有任何认证机制,那么此时客户端并不知道公钥被替换,仍然使用攻击者的公钥对数据进行加密;
- 攻击者接收到加密数据后,使用攻击者自己的私钥进行解密,然后将解密后的数据用真正的公钥进行加密后发送给服务器,并接收响应。
想要解决中间人攻击,客户端首先需要保证自己拿到的公钥是正确的公钥,此时需要借助
2.6 CA 证书
CA(Certification Authority)是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心,负责签发证书、认证证书和管理已颁发证书。如果用户想得到一份属于自己的证书,他可以向
顶级的

就
- DV (Domain Validation):最基础的域名型证书,只需要验证域名的所有权,特点是颁发速度快,但不知道所属者的身份。
- OV (Organization Validation):面向企业用户,需要验证网站所属企业的真实身份。
- EV (Extended Validation):是目前最高信任级别的
SSL 证书。按照国际规范审查网站企业身份和域名所有权,确保网站身份的真实可靠。
通过点击浏览器上锁图标可以查看对应网站的证书状态,示例如下:


除了以上三种证书外,你还可以使用

2.7 PKI 体系
PKI(Public Key Infrastructure,公开密钥基础建设系统)由数字证书、认证中心(CA
以
三、握手过程
以 TLS v1.2
版本中采用

-
TLS/SSL 协议是基于TCP/IP 协议的,因此需要先等待TCP 三次握手完成; -
TCP 握手完成后,客户端首先发起一个Client Hello
请求,里面包含客户端版本号、所有支持的密码套件、以及一个随机数Client Random
; -
服务器收到该请求后,会返回一个
Server Hello
消息,里面包含选中的用于本次通信的密码套件,以及一个随机数Server Random
; -
紧接着,为了证明自己的身份,服务器需要将证书发送给客户端。客户端收到证书后,沿着证书链逐级向上验证,确保拿到的是有效的证书;
-
之后服务器还会发送一个
Server Key Exchange
消息,里面包含了进行ECDHE 算法所需的各种参数Server Params
:

- 客户端按照密码套件的要求,也生成一个
Client Params
,并通过Client Key Exchange
消息发送给服务器;

-
经过以上步骤的交换,服务器和客户端都有了
Client Params
和Server Params
,它们分别根据这两个参数进行计算,ECDHE 算法能够保证客户端和服务器算出来的值是一样的,这个算出来的值就是预主密钥Pre-Master
; -
最后再利用预主秘钥,客户端随机数,服务器随机数共同算出真正的主密钥
Master_Secret
,算法如下:master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random)
这里的
PRF 是一个伪随机函数,用于增强master_secret 的随机性。主密钥Master_Secret
的长度固定为48 个字节,从中可以推导出以下四个密钥:- client_write_MAC_key
- server_write_MAC_key
- client_write_key
- server_write_key
client_write_MAC_key
和server_write_MAC_key
主要用于身份验证和完整性校验,而client_write_key
和server_write_key
则是对称加密中真正使用的会话密钥:- 客户端使用
client_write_key
加密,服务器对称地使用client_write_key
解密; - 服务器使用
server_write_key
加密,客户端对称地使用server_write_key
解密。
-
有了会话密钥后,客户端会发送一个
Change Cipher Spec
请求,告知服务器将加密方式由非对称加密转换为对称加密; -
紧接着,为了验证对称加密,客户端会将所有的握手消息(Handshake Message)进行加密,通过一个
Encrypted Handshake Message
请求发送给服务器; -
服务器解密并进行验证,如果验证通过,则也返回给客户端
Change Cipher Spec
和Encrypted Handshake Message
消息,代表双方共同达成协议,之后的通信都采用对称加密的方式。 -
除此之外,服务器还会返回一个
New Session Ticket
消息,其内容如下:
New Session Ticket
是一种优化连接的方式:服务器将会话信息加密后以
关于使用
参考资料
- 虞卫东
. 《深入浅出HTTPS :从原理到实战》. 电子工业出版社. 2018-06