1、HTTPS通讯过程
第一步:客户端向服务端发起请求
(1)客户端生成随机数R1 发送给服务端;
(2)告诉服务端自己支持哪些加密算法;
第二步:服务器向客户端发送数字证书
(1)服务端生成随机数R2;
(2)从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成);
(3)服务端生成把证书、随机数R2、会话密钥生成算法,一同发给客户端;
第三步:客户端验证数字证书。
(1)验证证书的可靠性,先用CA的公钥解密被加密过后的证书,能解密则说明证书没有问题,然后通过证书里提供的摘要算法进行对数据进行摘要,然后通过自己生成的摘要与服务端发送的摘要比对。
(2)验证证书合法性,包括证书是否吊销、是否到期、域名是否匹配,通过后则进行后面的流程
(3)获得证书的公钥、会话密钥生成算法、随机数R2
(4)生成一个随机数R3。
(5)根据会话秘钥算法使用R1、R2、R3生成会话秘钥。
(6)用服务端证书的公钥加密随机数R3并发送给服务端。
第四步:服务器得到会话密钥
(1)服务器用私钥解密客户端发过来的随机数R3
(2)根据会话秘钥算法使用R1、R2、R3生成会话秘钥
第五步:客户端与服务端进行加密会话
(1)客户端发送加密数据给服务端
发送加密数据:客户端加密数据后发送给服务端。
(2)服务端响应客户端
解密接收数据:服务端用会话密钥解密客户端发送的数据;
加密响应数据:用会话密钥把响应的数据加密发送给客户端。
(3)客户端解密服务端响应的数据
解密数据:客户端用会话密钥解密响应数据;
共享密钥加密(对称密钥加密):加密和解密使用相同密钥。
对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES。
公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走。
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
但由于公开密钥(非对称密钥)比共享密钥(对称密钥)要慢,所以我们就需要综合一下他们两者的优缺点,使他们共同使用,而这也是HTTPS采用的加密方式。在交换密钥阶段使用公开密钥加密(非对称密钥)加密方式,之后建立通信交换报文阶段则使用共享密钥(对称密钥)加密方式。
2、状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |