首页 > 其他分享 >HTTP与HTTPS

HTTP与HTTPS

时间:2022-09-23 18:01:24浏览次数:66  
标签:TLS SPDY HTTP CA SSL HTTPS 加密

HTTP 的缺点
通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
HTTPS 的诞生
为了解决 HTTP 协议的以上缺点,在上世纪90年代中期,由网景(NetScape)公司设计了 SSL 协议。SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。

到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。

很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

互联网加密协议历史:

1994年,NetScape 公司设计了 SSL 协议的1.0版,但是未发布。
1995年,NetScape 公司发布 SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0 版问世,得到大规模应用。
1999年,互联网标准化组织 ISOC 接替 NetScape 公司,发布了 SSL 的升级版 TLS 1.0 版。
2006年和2008年,TLS 进行了两次升级,分别为 TLS 1.1 版和 TLS 1.2 版。最新的变动是2011年 TLS 1.2 的修订版。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

所谓的 HTTPS 其实是“HTTP over SSL”或“HTTP over TLS”,它是 HTTP 与 SSL/TSL 的结合使用而已。

“对称加密”与“非对称加密”
明文传输消息

“加密”和“解密”
通俗而言,你可以把“加密”和“解密”理解为某种【互逆的】数学运算。就好比“加法和减法”互为逆运算、“乘法和除法”互为逆运算。
“加密”的过程,就是把“明文”变成“密文”的过程;反之,“解密”的过程,就是把“密文”变为“明文”。在这两个过程中,都需要一个关键的东西——叫做“密钥”——来参与数学运算。

“对称加密”

所谓的“对称加密技术”,意思就是说:“加密”和“解密”使用【相同的】密钥。这个比较好理解。就好比你用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包。当你下次要把这个压缩文件解开的时候,你需要输入【同样的】密码。在这个例子中,密码/口令就如同刚才说的“密钥”。

存在疑问:密钥怎么传输?
如果密钥可以安全的传输,那么消息也应该可以安全的传输,就像蛋生鸡,鸡生蛋一样。

“非对称加密”

所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用【不同的】密钥。当年“非对称加密”的发明,还被誉为“密码学”历史上的一次革命。

被劫持情况:

窃听者可以伪造服务器的公钥与客户端通讯,客户端以为是跟服务器通讯,其实是与窃听者在通讯,后果可想而知。

CA 证书
CA 是 PKI 系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party,简称TTP)。 CA 证书,顾名思义,就是 CA 颁发的证书。

CA 的初始是为了解决上面非对称加密被劫持的情况,服务器申请 CA 证书时将服务器的“公钥”提供给 CA,CA 使用自己的“私钥”将“服务器的公钥”加密后(即:CA证书)返回给服务器,服务器再将“CA 证书”提供给客户端。一般系统或者浏览器会内置 CA 的根证书(公钥),

HTTPS 中 CA 证书的获取

注:上图步骤 2 之后,客户端获取到“CA 证书”会进行本地验证,即使用本地系统或者浏览器中的公钥进行解密,每个“CA 证书”都会有一个证书编号可用于解密后进行比对(具体验证算法请查阅相关资料)。

步骤 5 之前使用的是对称加密,之后将使用对称加密来提高通讯效率。

SPDY
2012年google如一声惊雷提出了SPDY的方案,大家才开始从正面看待和解决老版本HTTP协议本身的问题,SPDY可以说是综合了HTTPS和HTTP两者有点于一体的传输协议,缩短 Web 页面的加载时间(50%)。

SPDY- The Chromium Projects

SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议(将HTTP1.x的内容封装成一种新的frame格式),同时可以使用已有的SSL功能。

具体详见:http://baike.baidu.com/item/SPDY

HTTP2.0
顾名思义有了HTTP1.x,那么HTTP2.0也就顺理成章的出现了。HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下两点:
HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS。
HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE。

标签:TLS,SPDY,HTTP,CA,SSL,HTTPS,加密
From: https://www.cnblogs.com/tzmy/p/16723624.html

相关文章

  • Feign调用第三方http接口 (摘抄)
    我们平常在开发的时候,经常会碰到调用第三方的接口,这个时候我们可以使用httpClient或者restTemplate,但是这两种方式相比较与Feign调用,都会麻烦一点儿。Feign是声明式服务调......
  • HttpServletResponse下载文件
    下载文件的方式有两种;目前掌握了本地下载(后续更)依旧是使用Servlet实现(浏览器调用servlet的url直接下载)    ......
  • http状态码返回302学到的一些小知识
    测试环境调用腾讯发货接口返回Http302,以下是302的定义  后面我们发现把http改成https就能正常返回了,应该是腾讯那边为了信息安全把HTTP改成了HTTPS。我们可以总结几......
  • .NET 部署Https(SSL)通过代码方式
    在上一个文章中,传送门,给大家介绍了怎么在配置文件中使用 Kestrel部署Https,正好今天有小伙伴稳问到:可以通过代码的方式实现 Kestrel的Https的部署吗?答案是肯定的......
  • 持续集成环境问题汇总(基于:java + testng + httpclient + allure + git + gitlab + jen
    说明包含前期调试遇到的问题 idea中,命令执行testng.xml,报错PleaserefertoD:\myjava\apiAutoTest\target\surefire-reportsfortheindividualtestresults.参考......
  • HTTP协议
    概念:超文本传输协议,规定了浏览器和服务器之间数据的传输规则特点:基于TCP协议:面向连接,安全基于请求-响应模型的:一次请求对应一次响应HTTP协议是无状态的协议:对于......
  • Flask学习笔记(二)-request请求对象+flask解析http请求数据
    一、flask请求对象requestrequest是flask框架的全局对象,你可以通过它来获得当前进入的请求数据,如果是在多线程环境下,flask可以保证你所使用的request对象就是当前这个线程......
  • HTTP API 自动化测试从手工到平台的演变
    https://www.infoq.cn/news/http-api-automated-test-from-manual-to-platform?utm_source=related_read_bottom&utm_medium=article不管是Web系统,还是移动APP,前后端逻......
  • Java使用HttpClient免证书去调用https的方案
    一、依赖引入<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.7</version></dependency>......
  • SQL Server——发起HTTP请求
    什么?SQL Server也是编程语言。能够发起HTTP通信。第一步 开启sqlServer通信组件sp_configure'showadvancedoptions',1;GORECONFIGURE;GOsp_configure'OleAu......