https请求过程

HTTP与HTTPS的不同点

  • 1、HTTPS需要用到CA申请证书。
  • 2、HTTP是超文本传输协议,信息是明文的;HTTPS则是具有安全性的SSL加密传输协议。
  • 3、HTTPS和HTTP使用的是完全不同的连接方式,用的端口也不一样,HTTP是80,HTTPS是443。
  • 4、HTTP的连接很简单,是无状态的,HTTPS是HTTP+SSL协议构建的,可进行加密传输、身份认证的网络协议,比HTTP协议安全。

HTTPS的优势

  • 1、内容加密,建立一个信息的安全通道,来保证数据传输过程的安全性。
  • 2、身份认证,确认网站的真是性。
  • 3、数据完整性,防止内容被第三方冒充或者篡改。

HTTPS请求过程

HTTPS协议的本质就是HTTP + SSL(or TLS)。在HTTP报文进入TCP报文之前,先使用SSL对HTTP报文进行加密。从网络的层级结构看它位于HTTP协议与TCP协议之间。

1
2
SSL(Secure Sokcet Layer,安全套接字层)
TLS(Transport Layer Security,传输层安全协议)

HTTPS在传输数据之前需要客户端与服务器进行一个握手(TLS/SSL握手),在握手过程中将确立双方加密传输数据的密码信息。

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

数字证书如何认证? 首先你的证书会在https握手过程中被传递到浏览器,浏览器从你的证书中找到了颁发者,从颁发者的证书(如果你电脑上有的话)又找到了CA的证书
(CA证书会在操作系统安装时就安装好,所以每个人电脑上都有根证书),使用CA证书中带的公钥来对颁发者证书做验签,一旦匹配,说明你电脑上的颁发者证书不是伪造的,
同理,再用颁发者证书中的公钥去验证你的证书,> 以此证明你的证书不是伪造的。这样整个链状的验证,从而确保你的证书一定是直接或间接从CA签发的,
这样浏览器地址栏会显示一个绿色的盾牌,表示你的网站能通过证书验证。
如果你的电脑上没有颁发者证书(断链)或者你自己本身就是自签名证书(自己做CA,但是要记得,人家电脑上并没有装你的自签名根证书),那么浏览器会报警提示不能验证证书,问你是否还需要继续。

对比HTTP和HTTPS的传输

HTTPS的优化

HTTPS 连接大致上可以划分为两个部分,第一个是建立连接时时的非对称加密握手,第二个是握手后的对称加密报文传输。
在最差的情况下,也就是不做任何的优化措施,HTTPS 建立连立连接可能会比HTTP 慢上几百毫秒甚至几秒,这其中既有网络耗时,也有计算耗时,就会让人产生“打开一个 HTTPS 网站好慢啊”的感觉。

优化措施

  • 硬件优化

    • 更快的CPU
    • SSL加速卡 如:阿里的Tengine
    • SSL加速服务器
  • 软件优化

    • 软件升级 如:Linux 内核由 2.x 升级到 4.x,把 把 Nginx 由 1.6 升级到 1.16,把 OpenSSL 由 1.0.1 升级到 1.1.0/1.1.1。
  • 协议优化

    • 采用 TLS1.3
    • 握手时使用的密钥交换协议应当尽量选用椭圆曲线的 ECDHE 算法。它不仅运算速度快,安全性高,还支持“False Start”
    • 椭圆曲线也要选择高性能的曲线,最好是 x25519,次优选择是 P-256。对称加密算法方面,也可以选用“AES_128_GCM”,它能比“AES_256_GCM”略快一点点。
  • 证书优化

    • 采用选择椭圆曲线(ECDSA)证书而不是 RSA 证书,因为 224 位的 ECC 相当于 2048 位的 RSA,节约带宽和计算量
    • “OCSP Stapling”(OCSP 装订),它可以让服务器预先访问 CA 获取 OCSP 响应,然后在握手时随着证书一起发给客户端,免去了客户端连接 CA 服务器查询的时间。
  • 会话复用

    • 会话复用的效果类似 Cache,前提是客户端必须之前成功建立连接,后面就可以用“Session ID”“Session Ticket”等凭据跳过密钥交换、证书验证等步骤,直接开始加密通信。

参考

文章目录
  1. 1. HTTP与HTTPS的不同点
  2. 2. HTTPS的优势
  3. 3. HTTPS请求过程
  4. 4. 对比HTTP和HTTPS的传输
  5. 5. HTTPS的优化
    1. 5.1. 优化措施
  6. 6. 参考
,
Fork me on GitHub