Page 63 - Web性能权威指南
P. 63

•   0 ms:TLS 在可靠的传输层(TCP)之上运行,这意味着首先必须完成 TCP 的“三
                   次握手”,即一次完整的往返。
                 •   56 ms:TCP 连接建立之后,客户端再以纯文本形式发送一些规格说明,比如它所运
                   行的 TLS 协议的版本、它所支持的加密套件列表,以及它支持或希望使用的另外一
                   些 TLS 选项。
                 •   84 ms:然后,服务器取得 TLS 协议版本以备将来通信使用,从客户端提供的加密
                   套件列表中选择一个,再附上自己的证书,将响应发送回客户端。作为可选项,服
                   务器也可以发送一个请求,要求客户端提供证书以及其他 TLS 扩展参数。
                 •   112 ms:假设两端经过协商确定了共同的版本和加密套件,客户端也高高兴兴地
                   把自己的证书提供给了服务器。然后,客户端会生成一个新的对称密钥,用服务
                   器的公钥来加密,加密后发送给服务器,告诉服务器可以开始加密通信了。到
                   目前为止,除了用服务器公钥加密的新对称密钥之外,所有数据都以明文形式
                   发送。
                 •   140 ms:最后,服务器解密出客户端发来的对称密钥,通过验证消息的 MAC 检
                   测消息完整性,再返回给客户端一个加密的“Finished”消息。
                 •   168 ms:客户端用它之前生成的对称密钥解密这条消息,验证 MAC,如果一切
                   顺利,则建立信道并开始发送应用数据。


                            新 TLS 连接要完成一次“完整的握手”需要两次网络往返。另外,还可以使
                            用“简短握手”,只需一次往返,详细信息请参见 4.3 节“TLS 会话恢复”。


                 协商建立 TLS 安全信道是一个复杂的过程,很容易出错。好在服务器和浏览器会替
                 我们做好这些工作,我们要做的就是提供和配置证书!

                 总之,尽管我们的 Web 应用不一定参与上述过程,但最重要的是知道每一个 TLS
                 连接在 TCP 握手基础上最多还需要两次额外的往返。这些都会增加实际交换数据之
                 前的等待时间!如果考虑不周,通过 TLS 交付数据很可能会引入几百甚至几千  ms
                 的网络延迟。


                                        公钥与对称密钥加密的性能

                   公钥加密系统(http://en.wikipedia.org/wiki/Public-key_cryptography)只在建立 TLS
                   信道的会话中使用。在此期间,服务器向客户端提供它的公钥,客户端生成对称
                   密钥并使用服务器的公钥对其加密,然后再将加密的对称密钥返回服务器。服务
                   器继而用自己的私钥解密出客户端发来的对称密钥。





                                                                     传输层安全(TLS)   |   45
   58   59   60   61   62   63   64   65   66   67   68