共计 2006 个字符,预计需要花费 6 分钟才能阅读完成。
说到 HTTPS 置信大部分人都是不生疏,因为目前咱们应用的绝大数网站都是基于 HTTPS 的,比方以下这些:
那么问题来了,他们为什么要应用 HTTPS 呢?HTTPS 有哪些过人之处呢?
1.HTTP
在说 HTTPS 之前,咱们先要理解 HTTP,因为 HTTP 是 HTTPS 通信的根底。
HTTP(HyperText Transport Protocol)超文本传输协定,它用于传输客户端和服务器端的数据。
HTTP 应用很简略也很不便,但却存在以下 3 个致命问题:
- 应用明文通信,内容能够被窃听。
- 不验证通信方的实在身份,可能会受到假装。
- 无奈证实报文的完整性,很容易被篡改。
鉴于以上问题,所以当初的零碎会应用 HTTPS 来代替 HTTP。
2.HTTPS
首先来说,HTTPS 并不是一种新的协定,而是在 HTTP 协定的根底上增加了加密机制 SSL(Secure Socket Layer)或 TLS(Transport Layer Security)。
HTTPS = HTTP + 加密 + 认证 + 完整性爱护。
SSL 和 TLS
SSL(Secure Socket Layer)最早是由浏览器开发厂商网景公司开发的,此公司开发了 SSL 3.0 及 3.0 之前的版本,之后便将 SSL 交给了 IETF(Internet Engineering Task Force)Internet 工程工作组的手中,IETF 以 SSL 3.0 为根底开发了 TLS 1.0,所以能够认为 TLS 是 SSL 的“新版本”。
2.1 解决信赖问题
作为 HTTPS 来说,首先要解决的就是信赖问题,也就是身份效验的问题,如果不解决信赖问题就会存在服务器假装,也就是“中间人攻打”的问题。
所谓的中间人攻打指的是,失常状况下本该是客户端和服务端间接进行交互的,但此处冲进去一个“好人”(中间人),它蕴含在客户端和服务器端之间,用于盗取和篡改单方通信的内容,如下图所示:
HTTPS 解决信赖问题采纳的是数字证书的解决方案,也就是服务器在创立之初,会先向一个大家都认可的第三方平台申请一个牢靠的数字证书,而后在客户端拜访(服务器端)时,服务器端会先给客户端一个数字证书,以证实本人是一个牢靠的服务器端,而非“中间人”。
此时浏览器会负责效验和核查数字证书的有效性,如果数字证书有问题,那么客户端会立刻进行通信,如果没问题才会执行后续的流程,如下图所示:
有了数字证书之后,就能够验证服务器端的实在身份了,这样就解决了“中间人攻打”的问题,也解决了假装的问题。
2.2 解决明文传输和完整性问题
尽管下面咱们曾经解决了信赖问题,然而因为通信单方是明文通信的,所以在通信时仍然存在通信内容被窃听的危险,此时应该怎么办呢?
于是咱们想到,应用加密来解决信息裸露的问题。
加密的分类
加密次要分为两大类:对称加密和非对称加密。
- 在对称加密中,有一个共享秘钥,通过这把共享秘钥能够实现信息的加密和信息的解密,它的特点是加密和解密的速度很快,但因为共享秘钥的问题,一旦共享秘钥被截获,那么所谓的加密和解码也就是一纸空谈了。
- 在非对称加密中,有一对秘钥:公钥和私钥,应用公钥能够加密信息,但不能解密信息,应用私钥能够解密信息。它的特点是服务器端保留私钥,不对外裸露,只将公钥发送给客户端,而其他人即便拿到公钥,也解密不了加密的信息,所以此形式更平安,但非对称加密的执行速度比较慢。
那在 HTTPS 中要应用对称加密还是非对称加密呢?
应用对称加密,速度快,但不平安;应用非对称加密平安,但速度慢。
只有小孩做抉择,成年人都要,所以 HTTPS 中既应用了非对称加密也应用了对称加密 ,它的整个交互流程是这样的:
HTTPS 执行流程如下:
- 客户端应用 HTTPS 拜访服务器端。
- 服务器端返回数字证书,以及应用非对称加密,生成一个公钥给客户端(私钥服务器端本人保留)。
客户端验证数字证书是否无效,如果有效,终止拜访,如果无效:
- 应用对称加密生成一个共享秘钥;
- 应用对称加密的共享秘钥加密数据;
- 应用非对称加密的公钥加密(对称加密生成的)共享秘钥。
- 发送加密后的秘钥和数据给服务器端。
- 服务器端应用私钥解密出客户端(应用对称加密生成的)共享秘钥,再应用共享秘钥解密出数据的具体内容。
- 之后客户端和服务器端就应用共享秘钥加密的内容内容进行交互了。
这样,HTTPS 既保证了安全性,同时又保障了高效性,堪称鱼和熊掌兼得。
应用加密的形式也间接的保障了数据的完整性问题,如果是不残缺的数据或有多余的数据,那么在解密时会报错,这样就能间接的保证数据的完整性了。
总结
应用 HTTP 协定存在明文通信和中间人攻打等问题,但这些问题在 HTTPS 中失去了无效的解决,HTTPS 通过数字证书解决了中间人攻打的问题,应用加密伎俩解决了明文通信和数据完整性的问题。
参考 & 鸣谢
《图解 HTTP》
《图解 TCP/IP 网络常识轻松入门》
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java 面试真题解析
面试合集:https://gitee.com/mydb/interview