HTTP与HTTPS
HTTP
-
基于请求与响应,无状态(同一个客户第二次访问服务器上同一个页面时,服务器的响应与第一次相同),应用层协议
-
基于TCP传输
-
使用明文
HTTPS
- HTTP协议 + SSL/TLS协议,SSL/TLS将数据加密,HTTP传输
- SSL: Secure Sockets Layer安全套接层协议
- TLS: Transport Layer Security传输层安全协议
密钥
- 密钥是一种参数,在明文转换为密文或密文转换为明文的算法中输入的参数。可以分为对称密钥与非对称密钥
对称加密(私钥加密)
- 信息的接收方与发送方使用同一个密钥进行加密或解密
- 特点:算法公开加密解密快,适合大量数据加密
- 对称加密过程中的密钥叫做私钥,表示该密钥不能泄漏
- 问题:私钥泄漏,密文容易破解,所以密钥安全管理困难
非对称加密(公钥加密)
- 使用一对密钥,公钥与私钥
- 私钥被自己保存,不能泄漏,公钥任何人都可以获得
- 用公钥或私钥中的一个加密,用另一个解密
- 加密解密时间花费长,速度慢
HTTPS通信过程
-
DNS->建立TCP连接->HTTPS握手->传输加密数据
-
HTTPS同时使用对称与非对称加密。
-
数据被对称加密传输
-
数据的对称加密需要客户端的一个密钥,为了确保该密钥安全传输到服务器,采用非对称加密对该密钥进行加密传输
-
过程:
- 客户端向服务:器发起HTTPS请求,连接到服务器443端口
- 浏览器将自己支持的一套加密规则发送给服务器端
- 服务器端有两个密钥,公钥与私钥,用来非对称加密,私钥不能泄漏,公钥可以发送给任何人
- 服务器从客户端发来的加密规则中选出一组加密规则与HASH算法,并将自己的身份信息以证书的形式发回浏览器。证书中包含网络地址,公开密钥算法,hash算法,公钥,证书颁发机构等信息
- 客户端验证服务器端证书的合法性(证书颁发机构是否合法,验证证书中的地址与访问地址是否一致等),合法浏览器生成一串随机密码并用证书中的公钥加密,使用约定好的hash算法计算握手消息,并用生成的随机数对消息加密,最后将之前的所有消息发送给网站
- 浏览器接收后:使用私钥将信息解密取出密钥,解密浏览器发来的握手消息,并验证hash是否一致,然后使用密钥加密之前所发送的所有握手消息的hash值,发送给客户端校验
- 真正的数据传输(对称加密)
-
浏览器与网站相互发送加密的握手消息并验证,保证双方都获得了一致的密码,并且可以正常加解密数据,为后续的真正数据传输做一次测试