文章开头,在前端面试游戏过程中,经常被问到https和ssl相关的内容。让我们比较和总结。http协议可能存在信息窃听或身份伪装等安全问题,使用https通信机制可以有效防止这些问题。https=http+ssl背景http和https的区别http的缺点使用明文通信,内容可能被窃听,在不验证通信双方身份的情况下随意篡改,可能存在伪装,消息的完整性无法证明,内容可能被篡改HTTPhttps具有以下特点:TLS/SSL内容加密数字证书(CA)验证身份,防止中间人攻击MD5、SHA-1等哈希值方法防止信息篡改加密方法使用相同的密钥对称加密数据的加密和解密。加解密速度快,效率高。缺点是密钥管理困难。密钥传输一旦泄露,就没有用了。所以解决方案是下面的非对称加密使用一对非对称密钥。一个称为私钥,另一个称为公钥。私钥保存在服务器上,公钥随意发送。也就是说,发送密文的一方用对方的公钥加密,对方收到信息后用私钥解密。不使用私钥很难恢复信息。混合加密HTTPS同时使用了对称加密和公钥加密,两者各有优势。对称加密速度快,但不能安全地将密钥发送给对方;非对称加密速度慢,但可以安全地交换密钥。但是如果我们把这两种加密方式结合起来使用,这两种加密方式可以相互补充。即使用非对称加密安全地交换共享密钥加密要使用的密钥,在保证密钥安全的前提下使用对称加密进行通信。SSL证书是遵循SSL协议的数字证书。它由受信任的数字证书颁发机构CA在验证服务器身份后颁发。具有服务器认证和数据传输加密功能。我经常使用DigiCert免费版,有效期只有一年。长期证书仍然很昂贵。文本内容SSL握手过程在开始加密通信之前,客户端和服务器必须首先建立连接并交换参数。这个过程称为握手(handshake)。如图:第一步,Alice给出了协议版本号,一个客户端生成的随机数(Clientrandom),以及客户端支持的加密方式。第二步,Bob确认双方使用的加密方式,并给出数字证书和服务器生成的随机数(Serverrandom)。第三步,Alice确认数字证书有效,然后生成一个新的随机数(Premastersecret),用数字证书中的公钥对该随机数进行加密,发送给Bob。第四步,Bob使用自己的私钥获取Alice发送的随机数(即Premastersecret)。第五步,Alice和Bob根据约定的加密方式,使用前面的三个随机数,生成一个“会话密钥”(sessionkey),用于加密接下来的整个对话过程。大白话版本1.客户端生成一个随机数,和客户端支持的加密方式列表一起发送给服务器,自己的随机数先存起来。2、服务端收到随机数,先保存,生成新的随机数,从客户端传递过来的加密方式列表中选择最合适的加密方式,以及自己的数字证书(公钥),三者一起发给客服端。3、客户端确认数字证书有效,先保存随机数,然后生成新的随机数,再用公钥加密随机数生成premastersecret,将premastersecretkey传给发送到服务器。当前步骤中的pre-mastersecretkey就是本次加密的关键。前两个随机数以纯文本形式发送。目前,这是用公钥加密的,所以不容易得到。就算拿到了也没关系,因为只有服务器上的秘钥才能解析出来,才能知道第三个随机数是多少。4、服务器收到pre-mastersecretkey后,用私钥解密得到一个随机数。此时,客服和服务器都知道了三个随机数。使用这三个随机数生成会话密钥,用于加密所有后续会话。图片是这样的:总结:HTTPS采用混合加密方式进行加密。最重要的加密是第三个随机数的传输,以保证这次传输的安全。参考资料:http://www.ruanyifeng.com/blo...
