首先要特别感谢阮一峰老师的分享,原文地址是http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html。以下是笔者在阮一峰老师文章的基础上自己的理解,希望能跟大家分享一下。
一、作用
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
(1) 所有信息都是加密传播,第三方无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。
SSL/TLS协议的基本思路是采用非对称加密的方式,大体流程就是客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。这里有两个问题:
(1)如何保证公钥不被篡改?
解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
(2)公钥加密计算量太大,如何减少耗用的时间?
在正式回答这个问题之前,我们先来说说非对称加密和对称加密,非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同:
1、加密和解密过程不同
对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。
2、加密解密速度不同
对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。
3、传输的安全性不同
对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。
非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。
前面也提到了,SSL/TLS的公钥加密其实是非对称加密,非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用,当我们正文内容比较多时,就容易导致性能问题!目前的解决方法是每一次对话(session),客户端和服务器端都生成同一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥会在生成对话密钥的过程中起作用,这样就减少了加密运算的消耗时间。
由上可知,SSL/TLS协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。
我们具体来聊聊以上过程的前两步,这两步又称为"握手阶段"(handshake),接下来我们看看握手过程: