HTTPS 协议的实现原理
1、大致了解几个基本术语(HTTPS、SSL、TLS)的含义
2、大致了解 HTTP 和 TCP 的关系(尤其是 “短连接”VS“长连接”)

3、大致了解加密算法的概念(尤其是 “对称加密与非对称加密” 的区别)
4、大致了解 CA 证书的用途

1. “HTTP”简介
HTTP 是一个网络协议,是专门用来帮你传输 Web 内容滴。关于这个协议,就算你不了解,至少也听说过吧?比如你访问俺的博客的主页,浏览器地址栏会出现如下的网址http://www.xxx.com/

2. “SSL/TLS”

  SSL 是洋文 “Secure Sockets Layer” 的缩写,中文叫做 “安全套接层”。它是在上世纪 90 年代中期,由网景公司设计的。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表” 和“JS 脚本”) 为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。

*3. “HTTPS”

HTTPS 协议,说白了就是 “HTTP 协议” 和“SSL/TLS 协议”的组合。你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。

4. HTTP 和 TCP 之间的关系

  简单地说,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。在网络分层模型中,TCP 被称为 “传输层协议”,而 HTTP 被称为 “应用层协议”。有很多常见的应用层协议是以 TCP 为基础的,比如 “FTP、SMTP、POP、IMAP” 等。TCP 被称为 “面向连接” 的传输层协议。关于它的具体细节,俺就不展开了(否则篇幅又失控了)。你只需知道:传输层主要有两个协议,分别是 TCP 和 UDP。TCP 比 UDP 更可靠。你可以把 TCP 协议想象成某个水管,发送端这头进水,接收端那头就出水。并且 TCP 协议能够确保,先发送的数据先到达(与之相反,UDP 不保证这点)。

HTTP 协议如何使用 TCP 连接?

  HTTP 对 TCP 连接的使用,分为两种方式:俗称 “短连接” 和“长连接”(“长连接”又称 “持久连接”,洋文叫做“Keep-Alive” 或“Persistent Connection”) 假设有一个网页,里面包含好多图片,还包含好多外部的CSS 文件和 JS 文件。在 “短连接” 的模式下,浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSS、JS)。然后针对每一个外部资源,再分别发起一个个 TCP 连接,把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开) 相反,如果是 “长连接” 的方式,浏览器也会先发起一个 TCP 连接去抓取页面。但是抓取页面之后,该 TCP 连接并不会立即关闭,而是暂时先保持着(所谓的“Keep-Alive”)。然后浏览器分析 HTML 源码之后,发现有很多外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。在 HTTP 1.0 版本,默认使用的是 “短连接”(那时候是 Web 诞生初期,网页相对简单,“短连接” 的问题不大); 到了 1995 年底开始制定 HTTP 1.1 草案的时候,网页已经开始变得复杂(网页内的图片、脚本越来越多了)。这时候再用短连接的方式,效率太低下了(因为建立 TCP 连接是有 “时间成本” 和“CPU 成本”滴)。所以,在 HTTP 1.1 中,默认采用的是 “Keep-Alive” 的方式。 关于 “Keep-Alive” 的更多介绍,可以参见维基百科词条。

“加密” 和“解密”?
“加密”的过程,就是把 “明文” 变成 “密文” 的过程;反之,“解密”的过程,就是把 “密文” 变为“明文”。在这两个过程中,都需要一个关键的东东——叫做“密钥”——来参与数学运算。

“对称加密”?

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

“非对称加密”?

意思就是说:“加密” 和“解密”使用不同的密钥

打个比方:如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。

保密性

  HTTPS 需要做到足够好的保密性。说到保密性,首先要能够对抗嗅探(行话叫 Sniffer)。所谓的 “嗅探”,通俗而言就是监视你的网络传输流量。如果你使用明文的 HTTP 上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。在发明 HTTPS 之前,由于 HTTP 是明文的,不但容易被嗅探,还容易被篡改。SSL 是在1995 年之前开始设计的,那时候的 HTTP 版本还是 1.0,默认使用的是 “短连接” 的 TCP 方式——默认不启用 Keep-Alive)。

HTTPS SSL/TLS协议原理相关推荐

  1. 详谈HTTPS SSL/TLS协议原理

    作者 | 朱小厮的博客 来源 | https://mp.weixin.qq.com/s/EVUsX57WOuFgzY748BvwuA 协议安全和加密越来越引起人们的重视和关注,今天就跟大家分享一点协议 ...

  2. SSL/TLS协议原理与证书签名多种生成方式实践指南

    本章目录: 0x00 前言简述 CA 认证原理 PKI 公钥基础设施 0x01 自签名SSL证书生成 1.在线(脚本)生成 2.OpenSSL 生成 3.CFSSL 生成 0x03 cfssl 使用实 ...

  3. 假如让你来设计SSL/TLS协议,你要怎么设计呢?

    本文分享自华为云社区<假如让你来设计SSLTLS协议>,作者:元闰子. 前言 说起网络通信协议,相信大家对 TCP 和 HTTP 都很熟悉,它们可以说是当今互联网通信的基石.但是,在网络安 ...

  4. SSL/TLS协议的运行原理浅析—https通信过程及CA证书诠释

    互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度.而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL TLS协议变得异常复杂.理清https原理与CA证书体系 互联网的通信 ...

  5. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  6. 聊聊 HTTPS 和 SSL/TLS 协议

    原文:http://www.techug.com/post/https-ssl-tls.html 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.S ...

  7. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  8. 【转】聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  9. 【拜读】HTTPS和SSL/TLS 协议

    声明:原文实在写得太棒了,本人情不自禁对其转载并作了相应整理,原文链接见文末. HTTPS.SSL.TLS术语: HTTP的用途: 首先,HTTP 是一个网络协议,是专门用来帮你传输 Web 内容滴. ...

最新文章

  1. 慎用jQuery中的submit()方法
  2. Apollo 11登月代码成Github热度第一:14.5万行,获星3.3万
  3. java的drawstring_java-Graphics.drawString()未绘制
  4. Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146
  5. 基于Boost::beast模块的同步HTTP客户端
  6. C语言简易行编辑器,简单的行编辑器C语言.doc
  7. python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码
  8. Webpack基础之输出
  9. 全数字实时仿真平台SkyEye与SystemC集成进行时序仿真
  10. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_5_线程间通信...
  11. Vue 实现电子签名
  12. python:库文件整理
  13. (附源码)ssm基于JSP的养老院信息管理系统的设计与实现 毕业设计 211141
  14. 典型ARM嵌入式Linux设备启动流程-S3C2440,S5PV210,AM3352x
  15. [词根词缀]dic/dign/divid/doc/dom由来及词源D故事
  16. java基础[多态基础,多态数组,多态参数方法]
  17. php word 开发指南大全 点击目录查看所有功能
  18. 红米S2解BL锁教程申请BootLoader解锁教程
  19. 查看Windows凭据和普通凭据的密码(查看Windows中存储的密码)——mimikatz
  20. 天刀论剑显示服务器,天涯明月刀手游论剑机制大改革 论剑pc与移动端分开匹配...

热门文章

  1. 艺术字计算机学院,最新职称计算机考试Word2003操作题:艺术字
  2. linux是否有安装java_Linux 安装 Java
  3. 基于Android中实现定时器的3种解决方法
  4. VS2012下基于Glut OpenGL GL_QUAD_STRIP示例程序:
  5. 用c语言实现键盘画图,用C实现键盘画图.doc
  6. django admin单例对象
  7. 上海的雨什么时候才可以停...
  8. MySQL replication学习笔记
  9. Winscp使用sudo user登录
  10. 关于推荐系统中的冷启动问题探讨(Approaching the Cold Start Problem in Recommender Systems)...