HTTP 和 HTTPS 的区别

可以先看对称加密和非对称加密,看完这个就很好理解 HTTPS 为什么要如此繁琐了。

  • HTTP: 端口号 80,超文本传输协议,应用层协议。用于在客户端浏览器和网站服务器之间传递消息。明文方式传递没有任何方式的数据加密,所以不适合传输一些敏感隐私信息。
  • HTTPS: 端口号 443,以安全为目标的HTTP通道,就是HTTP的安全版本,在HTTP的基础下加入SSL层,HTTPS的安全基础就是SSL。SSL证书需要申请。
    HTTPS 以安全为主,所以比HTTP更需要消耗服务器资源(服务端解密),响应速度也比HTTP慢(握手阶段费时)。

HTTPS 请求流程

  1. 浏览器向服务器 443 端口发起请求,请求携带了浏览器支持的加密算法和哈希算法。
  2. 服务器收到请求,选择浏览器支持的加密算法和哈希算法。
  3. 服务器下将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的。
  4. 浏览器进入数字证书认证环节,这一部分是浏览器内置的 TSL 完成的。
    4.1. 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。
    4.2. 用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性(验证过程类似上面 Bob 和 Susan 的通信)。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
    4.3. 浏览器生成一个随机数 R,并使用网站公钥对 R 进行加密
  5. 浏览器将加密的 R 传送给服务器。
  6. 服务器用自己的私钥解密得到 R。
  7. 服务器以 R 为密钥使用了对称加密算法加密网页内容并传输给浏览器。
  8. 浏览器以 R 为密钥使用之前约定好的解密算法获取网页内容。

一句话概括流程:浏览器发请求给服务器,服务器返回数字证书。浏览器验证证书的合法性。验证合法之后随机生成密钥R,再用证书中的公钥加密R,传送加密后的R。服务器用私钥解密获取到R。最后使用R加密网页内容,返回用R加密的网页内容,浏览器使用R解密网页内容

总结:浏览器验证数字证书的合法性,合法就随机生成一个密钥key,然后用证书里的公钥去加密这个密钥,这个被加密的密钥再发回给服务器,服务器得到被加密的密钥后,用证书的里的私钥去解密这个密钥,然后用这个密钥key去加密数据。浏览器获取到加密的数据,然后用密钥key去解密数据。这样的话用数字证书去解决非对称加密的被冒用身份的风险,用非对称加密去加密对称加密的密钥,解决了对称加密时密钥被劫持后的风险

推荐阅读更多精彩内容