说到HTTPS,相信大多数人都不陌生,因为我们使用的绝大多数网站都是基于HTTPS的,比如下面这些:那么问题来了,为什么要使用HTTPS呢?HTTPS有什么了不起的?1、HTTP在说HTTPS之前,我们首先要了解HTTP,因为HTTP是HTTPS通信的基础。HTTP(HyperTextTransportProtocol)超文本传输??协议,用于在客户端和服务器之间传输数据。HTTP使用起来非常简单方便,但是它有以下三个致命的问题:使用明文通信,内容可以被窃听。无法验证通信方的真实身份可能导致伪装。无法证明消息的完整性,很容易被篡改。鉴于以上问题,目前的系统将使用HTTPS代替HTTP。2、HTTPS首先,HTTPS并不是一个新的协议,而是在HTTP协议的基础上增加了一种加密机制SSL(SecureSocketLayer)或TLS(TransportLayerSecurity)。HTTPS=HTTP+加密+认证+完整性保护。SSL和TLSSSL(SecureSocketLayer)最先由浏览器开发商Netscape开发,它开发了SSL3.0和3.0之前的版本,然后将SSL交给了IETF(InternetEngineeringTaskForce)Internet工程任务,在IETF手中,TLS1.0TLS是基于SSL3.0开发的,所以TLS可以认为是SSL的“新版本”。2.1解决信任问题对于HTTPS,首先要解决的就是信任问题,即身份验证问题。如果不解决信任问题,就会出现服务器伪装,这就是“中间人攻击”的问题。所谓中间人攻击是指在正常情况下,客户端和服务器应该直接交互,但这里有一个“坏人”(maninthemiddle),它包含在客户端和服务器之间server,用于窃取和篡改双方通信的内容,如下图所示:HTTPS采用数字证书方案解决信任问题,即在服务器创建之初,它会先去大家认可的第三方平台申请靠谱的证书。数字证书,然后客户端访问时(服务器端),服务器会先给客户端一个数字证书,证明自己是可靠的服务器,而不是“中间人”。此时,浏览器将负责验证和检查数字证书的有效性。如果数字证书出现问题,客户端会立即停止通信。如果没有问题,就会执行后续流程,如下图:有了数字证书后,就可以验证服务器的真实身份,解决了“中间人攻击”的问题"并且还解决了伪装问题。2.2解决明文传输和完整性问题虽然上面我们已经解决了信任问题,但是由于双方是明文通信,所以在通信过程中仍然存在通信内容被窃听的风险。这个时候怎么办?于是我们想到了用加密来解决信息泄露的问题。加密的分类加密主要分为两类:对称加密和非对称加密。在对称加密中,有一个共享的秘钥,通过它可以实现信息的加密和解密。其特点是加密和解密的速度都非常快。如果密钥被截获,那么所谓的加密和解码就只是一句空话。在非对称加密中,有一对密钥:公钥和私钥。信息可以使用公钥加密,但不能解密。可以使用私钥解密信息。其特点是服务端保存私钥,不对外暴露,只将公钥发送给客户端。即使其他人拿到了公钥,也无法解密加密后的信息,所以这种方式比较安全,但是非对称加密的执行速度比较慢。那么我们应该在HTTPS中使用对称加密还是非对称加密呢?使用对称加密速度快但不安全;使用非对称加密是安全但速度慢的。只有孩子才能做出选择,而成年人不得不做出选择,所以HTTPS同时使用了非对称加密和对称加密。其整个交互过程如下:HTTPS执行过程如下:客户端使用HTTPS访问服务器。服务器返回数字证书,并使用非对称加密生成公钥给客户端(私钥由服务器自己保管)。客户端验证数字证书是否有效,如果无效,则终止访问,如果有效:使用对称加密生成共享密钥;使用对称加密共享密钥加密数据;使用非对称加密公钥加密(由对称加密生成)共享秘钥。将加密的密钥和数据发送到服务器。服务器端使用私钥解密客户端的共享秘钥(使用对称加密生成),然后使用共享秘钥解密数据的具体内容。之后,客户端和服务器与使用共享密钥加密的内容进行交互。这样一来,HTTPS既保证了安全,又保证了高效率,可以说是鱼和熊掌兼得。加密的使用也间接保证了数据的完整性。如果数据不完整或有冗余数据,解密时会报错,从而间接保证数据的完整性。总结使用HTTP协议存在明文通信、中间人攻击等问题,但是这些问题在HTTPS中得到了有效的解决。HTTPS通过数字证书解决中间人攻击的问题,使用加密解决明文通信和数据完整性的问题。Reference&Acknowledgment《图解HTTP》《图解TCP/IP网络知识轻松入门》判断是非在自己,听别人说,得失。公众号:Java面试真题分析面试合集:https://gitee.com/mydb/interview
