`
屌丝学Java
  • 浏览: 29838 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扫盲HTTPS和SSL/TLS协议

阅读更多
http://www.techug.com/https-ssl-tls
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。
1. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义
2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”)
3. 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别)
4. 大致了解 CA 证书的用途

考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下。如果你自认为不是菜鸟,请略过本章节,直接去看“HTTPS 协议的需求”。

先澄清几个术语——HTTPS、SSL、TLS

1. “HTTP”是干嘛用滴?

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

http://www.techug.com/

俺加了粗体的部分就是指 HTTP 协议。大部分网站都是通过 HTTP 协议来传输 Web 页面、以及 Web 页面上包含的各种东东(图片、CSS 样式、JS 脚本)。

2. “SSL/TLS”是干嘛用滴?

SSL 是洋文“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)
为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。
到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。
很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

3. “HTTPS”是啥意思?

解释完 HTTP 和 SSL/TLS,现在就可以来解释 HTTPS 啦。咱们通常所说的 HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合。你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。

再来说说 HTTP 协议的特点

作为背景知识介绍,还需要再稍微谈一下 HTTP 协议本身的特点。HTTP 本身有很多特点,考虑到篇幅有限,俺只谈那些和 HTTPS 相关的特点。

1. HTTP 的版本和历史

如今咱们用的 HTTP 协议,版本号是 1.1(也就是 HTTP 1.1)。这个 1.1 版本是1995年底开始起草的(技术文档是 RFC2068),并在1999年正式发布(技术文档是 RFC2616)。
在 1.1 之前,还有曾经出现过两个版本“0.9 和 1.0”,其中的 HTTP 0.9 【没有】被广泛使用,而 HTTP 1.0 被广泛使用过。
另外,据说明年(2015)IETF 就要发布 HTTP 2.0 的标准了。俺拭目以待。

2. HTTP 和 TCP 之间的关系

简单地说,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。

在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。

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

3. 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”的更多介绍,可以参见维基百科词条(在“这里”)
分享到:
评论

相关推荐

    基于SSL/TLS协议的FTP客户端和服务器端

    **基于SSL/TLS协议的FTP客户端和服务器端** 在当今的网络环境中,数据安全尤为重要,尤其是在文件传输过程中。FTP(File Transfer Protocol)虽然方便,但其明文传输的特性使得数据容易被窃取或篡改。为了解决这个...

    .net中为 SSL/TLS 安全通道建立信任关系

    SSL/TLS 协议由两部分组成:TLS 记录协议和 TLS 握手协议。TLS 记录协议负责加密和解密数据,而 TLS 握手协议负责身份验证和密钥交换。 SSL/TLS 信任关系 在 .NET 中,需要建立 SSL/TLS 安全通道的信任关系,以...

    解决 SSL/TLS协议信息泄露漏洞(CVE-2016-2183) ps1 文件

    解决 SSL/TLS协议信息泄露漏洞(CVE-2016-2183) ps1 文件

    Windows Server CVE-2016-2183 SSL/TLS协议信息泄露漏洞修复脚本

    Windows Server 合规漏洞修复,修复Windows Server CVE-2016-2183 SSL/TLS协议信息泄露漏洞修复脚本,基于Windows PowerShell, 兼容Windows Server 2016/2019,防止Sweet32 生日攻击

    ssl/tls安全协议

    SSL协议分为两个主要部分:握手协议和记录协议。握手协议负责建立安全连接,包括协商加密算法、交换会话密钥以及验证双方身份。记录协议则对数据进行分块、加密和完整性检查,确保数据在传输过程中的安全。 2. TLS...

    ssl_tls协议RFC5246文档_ssl_ssl标准文档_

    2. 服务器回应“ServerHello”消息,选择最高版本的共享协议和加密套件,并发送自己的随机数。 3. 服务器发送其数字证书,通常包含服务器的公钥。 4. 如果需要,服务器会发送“ServerKeyExchange”消息,提供额外的...

    Netty和SSL/TLS应用例子

    SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络安全传输层的重要协议,它们为网络通信提供了加密处理,确保了数据在网络中的安全传输。 本示例代码着重展示了如何在Netty中集成SSL/TLS,以...

    Implementing SSL / TLS Using Cryptography and PKI 1st Edition (无水印,数字版)

    根据提供的文件信息,可以看出这是一本关于实现SSL/TLS协议的书籍,使用密码学和公钥基础设施(PKI)作为实现手段。下面将详细介绍与这个主题相关的关键知识点。 SSL(安全套接字层)和TLS(传输层安全性)是两种...

    IISCrypto 解决SSL/TLS协议信息泄露漏洞的工具

    1. **禁用不安全的协议和算法**:IISCrypto允许用户禁用如SSL 2.0、SSL 3.0以及弱的TLS版本,这些版本存在已知的安全问题,容易受到攻击。 2. **启用最佳实践**:工具提供一键式“最佳实践”设置,按照业界公认的最...

    JAVA实现的SSL/TLS双向认证源代码

    Java提供的SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议是确保数据安全的重要工具。本篇将深入探讨如何使用Java实现SSL/TLS双向认证,以及涉及到的相关工具和步骤。 首先,让我们理解什么是...

    ssl_android.zip_TLS_android_android ssl_application_ssl/tls

    2. **禁用不安全的协议和密码套件**:移除不再安全的SSL/TLS协议(如SSLv3)和密码套件,避免使用弱加密。 3. **定期更新信任的根证书**:定期检查并更新应用的信任根证书列表,确保能识别新的合法证书颁发机构。 ...

    关于SSL/TLS的认识

    SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络安全协议,用于在互联网上提供安全通信。它们确保了在客户端(如浏览器)和服务器之间传输的数据是加密的,保护了用户的隐私和数据完整性,防止...

    netty实现SSL/TSL双向加密认证示例

    SSL/TLS 是互联网上广泛采用的安全通信协议,确保数据在网络传输过程中保持私密性和完整性。 首先,让我们了解 SSL/TLS 的基本概念。SSL/TLS 提供了服务器身份验证、客户端身份验证以及数据加密。在双向认证中,...

    tls.rar_ tls protocol_TLS_ssl_ssl/tls_tls pdf

    **压缩包子文件的文件名称列表:** "tls.pdf" 表示压缩包里只有一个名为“tls”的PDF文件,这应当就是关于TLS和SSL协议的文档。 **详细知识点:** 1. **TLS协议**:TLS是互联网上用于加密通信的协议,它的主要目的...

    scapy-ssl_tls-1.2.3.4.zip

    Scapy-ssl_tls是Python中一个强大的工具,用于解析、构造和操纵网络协议的数据包,特别是在处理SSL/TLS加密通信时。这个库扩展了著名的Scapy框架,使其能够解码和构建SSL/TLS协议的数据包,这对于网络安全分析、渗透...

    Implementing SSL TLS Using Cryptography and PKI.pdf

    **SSL**(Secure Sockets Layer)和**TLS**(Transport Layer Security)是用于在互联网上建立安全连接的标准协议。这两种协议的主要目的是确保数据在网络传输过程中的安全性和完整性。尽管SSL通常指的是其早期版本,但...

    SSL&TLS 协议详解

    SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议是互联网上广泛采用的安全协议,主要用于在网络通信中确保数据的安全性和完整性。它们主要在TCP/IP协议之上,为上层应用提供安全服务,比如HTTPS...

    XEP-0035: SSL/TLS Integration.pdf

    SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络安全协议,用于在互联网上提供加密通信和身份验证。它们主要用于保护数据传输,防止中间人攻击和数据窃取。在XMPP网络中,SSL/TLS的集成对于...

Global site tag (gtag.js) - Google Analytics