因为 HTTP (明文)不安全,所以引入 HTTPS 通信安全 = 机密性 + 完整性 + 身份认证 + 不可否认
SSL/TLS
- SSL:安全套接层(Secure Sockets Layer)
TLS:传输层安全(Transport Layer Security) — 升级版 SSL
TLS 协议组成
TLS 是拿来做加密数据传输的,采用 认证密钥协商 + 对称加密传输 的结构
握手协议(handshake protocol):做认证密钥协商
- 密钥规格变更协议(change cipher spec protocol)
- 警告协议(alert protocol)
- 记录协议(record protocol):做对称加密传输
record 协议
做应用数据的对称加密传输,占据一个 TLS 连接的绝大多数流量
从应用层接收数据,然后做以下操作:
- 生成序列号,为每个数据块生成唯一编号,防止被重放或被重排序
- 压缩:可选,使用握手协议协商出的压缩算法做压缩
- 加密:使用握手协议协商出来的 key 做加密/解密
handshake 协议
handshake protocol 用于产生给 record protocol 使用的 SecurityParameters
- 客户端和服务端协商 TLS 协议版本号和 CipherSuite(密码套件)
- 认证对端的身份(可选,一般如 https 是客户端认证服务端的身份)
- 使用密钥协商算法生成共享的 master secret
步骤如下:
- 交换 Hello 消息,协商出算法,交换 random 值,检查 session resumption(恢复)
- 交换必要的密码学参数,来允许 client 和 server 协商出 premaster secret
- 交换证书和密码学参数,让 client 和 server 做认证,证明自己的身份
- 从 premaster secret 和交换的 random 值,生成出 master secret
- 把 SecerityParameters 提供给 record 层
- 允许 client 和 server 确认对端得出了相同的 SecurityParameters,并且握手过程的数据没有被攻击者篡改
从加解密的角度思考
- 使用对称和非对称的混合加密方式,解决数据传输安全问题
- 在传输数据阶段使用对称加密,对称加密的密钥使用非对称加密来传输
- 引入中间机构 CA (Certificate Authority),CA 通过给服务器颁发数字证书(Digital Certificate),解决浏览器对服务器的信任问题
步骤如下:
- 浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数 client-random
- 服务器保存随机数 client-random,选择对称加密和非对称加密的套件,然后生成随机数 service-random,向浏览器发送选择的加密套件、service-random 和数字证书
- 浏览器验证证书,生成随机数 pre-master,然后利用公钥对 pre-master 加密,并向服务器发送加密后的数据
- 服务器拿出自己的私钥,解密出 pre-master 数据,并返回确认消息
数字证书申请流程
浏览器验证证书的流程
- 证书的有效期
- 证书是否被 CA 吊销
- 证书是否是合法的 CA 机构颁发的
加密算法
对称加密
非对称加密
私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。
随机数
使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法