`
阅读更多

 

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 被广泛使用过。
另外,据说明年(2015IETF 就要发布 HTTP 2.0 的标准了。俺拭目以待。

 

2. HTTP TCP 之间的关系

 

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

 

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

 

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

 

3. HTTP 协议如何使用 TCP 连接?

 

HTTP TCP 连接的使用,分为两种方式:俗称短连接长连接长连接又称持久连接,洋文叫做“Keep-Alive”“Persistent Connection”
假设有一个网页,里面包含好多图片,还包含好多【外部的】CSS 文件和 JS 文件。在短连接的模式下,浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSSJS)。然后针对【每一个】外部资源,再分别发起一个个 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”的更多介绍,可以参见维基百科词条(在这里

 

谈谈对称加密非对称加密的概念

 

1. 啥是加密解密

 

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

 

2. 啥是对称加密

 

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

 

3. 啥是非对称加密

 

所谓的非对称加密技术,意思就是说:加密解密使用【不同的】密钥。这玩意儿比较难理解,也比较难想到。当年非对称加密的发明,还被誉为密码学历史上的一次革命。
由于篇幅有限,对非对称加密这个话题,俺就不展开了。有空的话,再单独写一篇扫盲。

 

4. 各自有啥优缺点?

 

看完刚才的定义,很显然:(从功能角度而言)非对称加密能干的事情比对称加密要多。这是非对称加密的优点。但是非对称加密的实现,通常需要涉及到复杂数学问题。所以,非对称加密的性能通常要差很多(相对于对称加密而言)。
这两者的优缺点,也影响到了 SSL 协议的设计。

 

CA 证书的原理及用途

 

关于这方面,请看俺4年前写的《数字证书及CA的扫盲介绍》。这里就不再重复唠叨了,免得篇幅太长。

 

HTTPS 协议的需求是啥?

 

花了好多口水,终于把背景知识说完了。下面正式进入正题。先来说说当初设计 HTTPS 是为了满足哪些需求?
很多介绍 HTTPS 的文章一上来就给你讲实现细节。个人觉得:这是不好的做法。早在2009年开博的时候,发过一篇《学习技术的三部曲:WHATHOWWHY》,其中谈到“WHY 型问题的重要性。一上来就给你讲协议细节,你充其量只能知道 WHAT HOW,无法理解 WHY。俺在前一个章节讲了背景知识,在这个章节讲了需求,这就有助于你理解:当初

 

为什么

 

要设计成这样?——这就是 WHY 型的问题。

 

兼容性

 

因为是先有 HTTP 再有 HTTPS。所以,HTTPS 的设计者肯定要考虑到对原有 HTTP 的兼容性。
这里所说的兼容性包括很多方面。比如已有的 Web 应用要尽可能无缝地迁移到 HTTPS;比如对浏览器厂商而言,改动要尽可能小;……
基于兼容性方面的考虑,很容易得出如下几个结论:
1. HTTPS
还是要基于 TCP 来传输
(如果改为 UDP 作传输层,无论是 Web 服务端还是浏览器客户端,都要大改,动静太大了)
2.
单独使用一个新的协议,把 HTTP 协议包裹起来
(所谓的“HTTP over SSL”,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装。HTTP 协议原有的 GETPOST 之类的机制,基本上原封不动)

 

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

 

可扩展性

 

前面说了,HTTPS 相当于是“HTTP over SSL”
如果 SSL 这个协议在可扩展性方面的设计足够牛逼,那么它除了能跟 HTTP 搭配,还能够跟其它的应用层协议搭配。岂不美哉?
现在看来,当初设计 SSL 的人确实比较牛。如今的 SSL/TLS 可以跟很多常用的应用层协议(比如:FTPSMTPPOPTelnet)搭配,来强化这些应用层协议的安全性。

 

接着刚才打的比方:如果把 SSL/TLS 视作一根用来加固的金属管,它不仅可以用来加固输水的管道,还可以用来加固输煤气的管道。

 

保密性(防泄密)

 

HTTPS 需要做到足够好的保密性。
说到保密性,首先要能够对抗嗅探(行话叫 Sniffer)。所谓的嗅探,通俗而言就是监视你的网络传输流量。如果你使用明文的 HTTP 上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。
嗅探是最低级的攻击手法。除了嗅探,HTTPS 还需要能对抗其它一些稍微高级的攻击手法——比如重放攻击(后面讲协议原理的时候,会再聊)。

 

完整性(防篡改)

 

除了保密性,还有一个同样重要的目标是确保完整性。关于完整性这个概念,在之前的博文《扫盲文件完整性校验——关于散列值和数字签名》中大致提过。健忘的同学再去温习一下。
在发明 HTTPS 之前,由于 HTTP 是明文的,不但容易被嗅探,还容易被篡改。
举个例子:
比如咱们天朝的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某网站(本来是没有广告的),竟然会跳出很多中国电信的广告。为啥会这样捏?因为你的网络流量需要经过 ISP 的线路才能到达公网。如果你使用的是明文的 HTTPISP 很容易就可以在你访问的页面中植入广告。
所以,当初设计 HTTPS 的时候,还有一个需求是确保 HTTP 协议的内容不被篡改

 

真实性(防假冒)

 

在谈到 HTTPS 的需求时,真实性经常被忽略。其实真实性的重要程度不亚于前面的保密性完整性
举个例子:
你因为使用网银,需要访问该网银的 Web 站点。那么,你如何确保你访问的网站确实是你想访问的网站?(这话有点绕口令)
有些天真的同学会说:通过看网址里面的域名,来确保。为啥说这样的同学是天真的?因为 DNS 系统本身是不可靠的(尤其是在设计 SSL 的那个年代,连 DNSSEC 都还没发明)。由于 DNS 的不可靠(存在域名欺骗域名劫持),你看到的网址里面的域名【未必】是真实滴!
(不了解域名欺骗域名劫持的同学,可以参见俺之前写的《扫盲 DNS 原理,兼谈域名劫持域名欺骗/域名污染》)
所以,HTTPS 协议必须有某种机制来确保真实性的需求(至于如何确保,后面会细聊)。

 

性能

 

再来说最后一个需求——性能。
引入 HTTPS 之后,【不能】导致性能变得太差。否则的话,谁还愿意用?
为了确保性能,SSL 的设计者至少要考虑如下几点:
1.
如何选择加密算法(对称”or“非对称)?
2.
如何兼顾 HTTP 采用的短连接”TCP 方式?
SSL 是在1995年之前开始设计的,那时候的 HTTP 版本还是 1.0,默认使用的是短连接 TCP 方式——默认不启用 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 安全通道的信任关系,以...

    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协议信息泄露漏洞(CVE-2016-2183) ps1 文件

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

    ssl/tls安全协议

    通过阅读"openssl.pdf"、"SSL.ppt"、"TLS(SSL)协议.ppt"和"OpenSSL编写SSL,TLS程序.txt"等文档,可以深入理解SSL/TLS协议的工作原理,掌握OpenSSL的使用方法,并了解如何在自己的应用程序中实现安全的通信机制。...

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

    SSL/TLS协议的主要目标是提供数据的机密性、完整性和身份验证。它通过使用公钥基础设施(PKI)和数字证书来实现这些目标。PKI允许用户通过公钥加密数据,只有拥有对应私钥的接收者才能解密。数字证书由受信任的第三...

    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协议信息泄露漏洞的工具

    总之,IISCrypto是Windows服务器管理员的强大助手,它简化了SSL/TLS协议的管理和安全优化过程,帮助抵御包括CVE-2016-2183在内的各种安全威胁。定期检查和更新服务器的SSL/TLS配置,是保障网络服务安全的重要措施。

    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

    SSL/TLS(Secure Sockets Layer/...总之,Android应用程序通过SSL/TLS协议实现安全通信,涉及证书管理、HTTPS连接、异常处理等多个环节。开发者应遵循最佳实践,不断更新和优化安全策略,以确保用户数据的安全。

    关于SSL/TLS的认识

    SSL/TLS协议的主要目标是为网络通信提供加密处理,验证通信双方的身份,并建立一个安全的通信通道。它主要由以下几个步骤组成: 1. **握手协议**:客户端和服务器首先通过握手协议确定使用的协议版本、加密算法以及...

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

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

    tls.rar_ tls protocol_TLS_ssl_ssl/tls_tls pdf

    **标签理解:** "_tls_protocol"、"tls"、"ssl"、"ssl/tls" 和 "tls__pdf" 这些标签强调了文档的主题,包括TLS协议、SSL协议以及它们的结合使用,同时也说明了文档的类型是PDF。 **压缩包子文件的文件名称列表:** ...

    scapy-ssl_tls-1.2.3.4.zip

    这个库扩展了著名的Scapy框架,使其能够解码和构建SSL/TLS协议的数据包,这对于网络安全分析、渗透测试以及网络协议开发等工作至关重要。 在Python环境中,通常会使用PyCharm这样的集成开发环境(IDE)来安装和管理...

    Implementing SSL TLS Using Cryptography and PKI.pdf

    **公钥基础设施**(Public Key Infrastructure, PKI)是一套技术和政策的集合,旨在管理和维护数字证书的有效性,从而支持SSL/TLS协议的安全运行。 - **数字证书**: 数字证书是由可信的第三方机构颁发的电子文档,...

    SSL&TLS 协议详解

    SSL/TLS协议详解 SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议是互联网上广泛采用的安全协议,...通过SSL/TLS协议,服务器和客户端之间的通信得以保护,从而促进了安全的在线交易和信息交流。

    XEP-0035: SSL/TLS Integration.pdf

    3. **数据加密**:SSL/TLS协议提供了对传输数据的端到端加密,这意味着即使数据在网络中被拦截,攻击者也无法读取其内容。这对于包含敏感信息的即时消息来说非常重要。 4. **连接迁移**:在某些情况下,XEP-0035...

Global site tag (gtag.js) - Google Analytics