秒懂HTTPS接口(原理篇)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【4月更文挑战第24天】秒懂HTTPS接口(原理篇)

前言

讲HTTPS之前,我们先来回顾一下HTTP协议。HTTP是一种超文本传输协议,它是无状态的、简单快速的、基于 TCP 的可靠传输协议。

既然 HTTP 协议这么好,那为什么又冒出来了一个 HTTPS 呢?HTTP本身不具备加密的功能,所以也就无法做到对通信整体内容进行加密,
也就是说HTTP是明文传输的,这就造成了很大的安全隐患。在网络传输过程中,只要数据包被人劫持,那你就相当于赤身全裸的暴露在他人面前,毫无半点隐私可言。想象一下,如果你连了一个不可信的WIFI,正好有使用了某个支付软件进行了支付操作,那么你的密码可能就到别人手里去了,后果可想而知。

image.png

网络环境的就是这样,给你带来便利的同时,也到处充满了挑战与风险。对于小白用户,你不能期望他有多高的网络安全意识,产品应该通过技术手段,让自己变得更安全,从源头来控制风险。这就诞生了HTTPS协议。

HTTPS简介

因为HTTP是明文传输,所以造成了安全隐患。如何让数据传输以加密的方式进行,就消除了该隐患。而SSL/TSL提供认证和加密处理及摘要功能。
为了统一解决上述的问题,需要在HTTP上加密处理和认证等机制。我们把添加了加密和认证机制的HTTP称为HTTPS。
image.png

HTTPS并非是应用层的一种新协议,只是通信接口部分用SSL/TLS协议代替而已。
所谓的HTTPS,简单理解就是身披SSL/TLS协议壳的HTTP
image.png

从网络的七层模型来看,原先的四层 TCP 到七层 HTTP 之间是明文传输,在这之间加一个负责数据加解密的传输层(SSL/TLS),保证在网络传输的过程中数据是加密的,而HTTP接收到的依然是明文数据,不会有任何影响。

SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。

HTTPS实现原理

大致原理

通过上面的介绍,对HTTPS有了大致的了解。可本质问题还没说,HTTPS是如何实现数据的加密传输?

首先,先来了解下加密算法的方式,常用的有两种:对称加密与非对称加密。

  • 对称加密:即通信双方通过相同的密钥进行信息的加解密。加解密速度快,但是安全性较差,如果其中一方泄露了密钥,那加密过程就会被人破解。
    image.png

  • 非对称加密:相比对称加密,它一般有公钥和私钥。公钥负责信息加密,私钥负责信息解密。两把密钥分别由发送双发各自保管,加解密过程需两把密钥共同完成。安全性更高,但同时计算量也比对称加密要大很多。
    image.png

技术细节

对于网络通信过程,在安全的前提下,还是需要保证响应速度。如何每次都进行非对称计算,通信过程势必会受影响。所以,人们希望的安全传输,最终肯定是以对称加密的方式进行。如图:
image.png

首先 Session Key是如何得到的,并且在 Session Key之前的传输都是明文的。Session Key通过网络传输肯定不安全,所以它一定各自加密生成的。因此在这之前,双方还要互通,确认加密的算法,并且各自添加随机数,提高安全性。如图:
image.png

这样双方确认了使用的 SSL/TLS 版本,以及生成 Session Key的加密算法。并且双方拥有了2个随机数(客户端、服务端各自生成一个)。可是如果按照目前的随机参数,加上加密算法生成Session Key呢,还是存在风险,加密算法是有限固定的,而且随机数都是明文传输的,有被截获的可能。

让加密算法变得不可预测,可能性不大。那么能否再传输一个加密的随机数,这个随机数就算被截获,也无法破译。这就用到了非对称加密算法,我们在步骤二中,把公钥传输给客户端。这样客户端的第三个随机数用公钥加密,只有拥有私钥的服务端才能破译第三个参数,这样生成的 Session 就是安全的了。如图:

image.png

看似完成了,现在生成的 Session Key 是不可预测的(就算被截获也无所谓),我们可以放心的进行私密通信了。真的是这样吗?我们似乎对服务端给的公钥十分信任,如果你目前通信的本身就不可信,或者被中间人劫持,由它发送伪造的公钥给你,那后果可想而知,这就是传说中的“中间人攻击”。

所以,我们得包装一下公钥,让它变得安全。这就引出了数字证书的概念,数字证书由受信任的证书机构颁发,证书包含证书文件与证书私钥文件。私钥文件由服务端自己保存,证书文件发送给请求的客户端,文件包含了域名信息、公钥以及相应的校验码。客户可以根据得到的证书文件,校验证书是否可信。如图:
image.png

通俗的表示整个流程如图:
image.png

证书示例:
image.png
Extended Validation(EV):该级别的证书具有最高的安全性,也是最值得信任的。它除了给出更详细的公司/组织信息外,还在浏览器的地址栏上直接给出了公司名称。
示例:https://www.github.com

小故事

如果上面的技术细节没怎么看太懂?来,我们来讲个故事。
我们在网络的行为(例如看浏览、上传图片、聊天),简单来说都是向服务器发送消息、接收服务器的消息,这个过程很像信鸽传书。
为了更加形象,我们把通信过程中的主要角色服务器、客户端、黑客的称呼也替换一下,小服、小客、小黑
小客想给小服发送信息,那么她就把信绑在信鸽腿上,放出信鸽,小服接到信鸽,拿到信纸读消息,这个过程就完成了,很不错,简单方便。
但是,坏人小黑出现了,他把正在愉快飞翔的信鸽抓了下来,并把信给换了,这就麻烦了,小服得到了假消息。
这就是 HTTP 的沟通方式,方便但极不安全,不能传递重要信息。

但是小服小客很聪明,想到了一个好办法,他们设定了一套编码规则:把字母偏移3个位置,例如,D → A、E → B、F → C,这样,原本的消息“secret message” 就变成了 “pbzobq jbppxdb”。
小黑截获到消息后就会一脸懵逼,看不懂改不了,但是小服知道解码规则,可以轻松转化成原文。
这个方式就是“对称式加密”。

对称式加密很安全,只要保护好key,别让其他人知道即可,但也有个问题,如果小服小客在通信之前不认识,他们就没办法设定加密规则。
为了解决这个问题,通信方式又一次升级了,比如小客向给小服发送信息,他们的通信流程如下:

  1. 小客让信鸽飞到小服那儿,但啥也没带,没有信息。
  2. 小服让信鸽带着一个箱子和一把开着的锁飞回到小客小服自己留着锁的钥匙。小服让信鸽带着一个箱子和一把开着的锁飞回到小客小服自己留着锁的钥匙。
  3. 小客把信放到箱子里,并用锁把箱子锁上,让信鸽把箱子带给小服小客把信放到箱子里,并用锁把箱子锁上,让信鸽把箱子带给小服
  4. 小服收到箱子,用钥匙开锁,拿到信
  5. 这样小黑就没招儿了,小服小客可以愉快的通信了。这样小黑就没招儿了,小服小客可以愉快的通信了。

这个方式就是“非对称加密”,这个箱子就是公钥,开锁的钥匙就是私钥

细想一下,有个问题,小客怎么确认箱子来自小服而不是小黑呢?为此,小服决定给箱子签个名,小客收到后先检查一下签名就可以确认了。
但这样还不够稳妥,小服决定让最权威的小明来签名,小明是干啥的?他非常有名望,是个绝对值得信赖的家伙,他的签名大家都认,小明就是大名鼎鼎的 CA(Certification Authority)。
小服小明建立了合作,小明收到小服的请求就会为她签名,而小黑是得不到小明小客的签名的,这样小服就可以放心了。
这就是HTTPS的通信通俗原理了,是不是很好理解。

我们可以看到 HTTPS 比 HTTP的流程重了很多,有个箱子,还有签名,还增加了往返过程,性能肯定有所影响,这一切都是为了安全,所以我们要根据自己的需求场景来选择什么时候使用 HTTPS,什么时候使用 HTTP。

参考文献:
[1]上野宣,于均良译.图解HTTP.北京:人民邮电出版社,2014.
[2]https://github.com/jasonGeng88/blog/blob/master/201705/https.md

目录
相关文章
|
2月前
|
安全 网络安全 数据安全/隐私保护
https的原理
https的原理
44 2
|
3月前
|
安全 算法 网络协议
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
45 2
|
4月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
88 10
|
3月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
262 0
|
5月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
62 2
|
6月前
|
Web App开发 Java 测试技术
秒懂HTTPS接口(JMeter压测篇)
【5月更文挑战第11天】秒懂HTTPS接口(JMeter压测篇)
1665 2
秒懂HTTPS接口(JMeter压测篇)
|
5月前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
51 1
|
5月前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
55 1
|
6月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
5月前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
32 0