HTTP 与 HTTPS 的区别

一句话总结:

HTTP以明文方式发送内容,不验证服务器身份,不提供数据加密

HTTPS在HTTP基础上加了SSL协议,验证服务器身份加密传输的数据

下面具体总结一下HTTPS如何实现身份验证+数据加密的:

数据加密

  • 客户端和服务器之间的数据加密是对称的(这是为了提高效率,数据很多的情况下,非对称加密效率低),实现对称加密,只需要一把钥匙(简称密钥),密钥只有客户端和服务器知道,其他人不知道。
  • 这把密钥的是由客户端生成的,生成过程采用非对称加密,具体过程如下
  • 客户端向服务器要服务器的公钥,用来加密对称加密的密钥
  • 服务器发给客户端服务器的公钥,客户端收到后,首先生成一个随机数,这个随机数就是密钥,然后用这把服务器的公钥加密密钥
  • 客户端把加密的密钥发给服务器
  • 服务器用自己的私钥解密,得到了对称加密的密钥(因为只有服务器的私钥能解服务器的公钥,所以得到的密钥只有客户端和服务器知道,其他人不知道)

这就是数据加密的过程:非对称加密生成密钥,用密钥进行数据的对称加密。

然而这里有个问题,服务器可能会被冒充,假服务器在中间发送假的公钥,客户端以为自己在和服务器对称加密通信,实际是和假的服务器对称加密通信。

解决办法就是服务器身份验证,具体如下:

  • 为了验证服务器的身份(或者说是安全传输服务器的公钥),解决方法是申请一个服务器的数字证书
  • 数字证书是服务器去权威机构(CA)申请的,包含的是用权威机构的私钥加密的两个信息:服务器的公钥,数字签名(对证书内容用Hash函数,生成证书摘要,再用权威机构的私钥加密)。这个数字证书只有权威机构的公钥才能解开
  • 这样服务器不直接给客户端发服务器的公钥,而是发服务器的数字证书
  • 客户端收到服务器的数字证书,就用权威机构的公钥(正规的浏览器提供)解开,得到服务器的公钥和数字签名。(这里能用权威机构的公钥解密,说明这个证书的确来自权威机构)
  • 客户端用权威机构的私钥解开数字签名,得到证书摘要H1,再用Hash函数自己生成一次证书摘要H2,如果H1等于H2,说明数字证书没有被篡改过(如果数字证书被篡改了,篡改者必须对应的修改数字签名,但篡改者没有权威机构的私钥,无法生成对应的数字签名,导致H1不等于H2)
  • 证书没有被篡改的基础上,客户端检查证书上的使用者的URL和我们请求的URL是否相等,如果相等,那么就可以证明这个证书的确来自我们请求的服务器。
  • 这样证明了证书的确来自权威机构+证书没有被篡改+证书的来源可信,那么里面的服务器的公钥就一定是可信的

你可能感兴趣的:(HTTP 与 HTTPS 的区别)