MyException - 我的反常网
当时方位:我的反常网» 归纳 » 聊聊HTTPS和SSL/TLS协议

聊聊HTTPS和SSL/TLS协议

www.x8vin4.com  网友共享于:2015-02-04  阅读:0次

要说清楚 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”的更多介绍,能够拜见维基百科词条(在“这儿”)
谈谈“对称加密”和“非对称加密”的概念


1. 啥是“加密”和“解密”?

浅显而言,你能够把“加密”和“解密”了解为某种【互逆的】数学运算。就比方“加法和减法”互为逆运算、“乘法和除法”互为逆运算。
“加密”的进程,便是把“明文”变成“密文”的进程;反之,“解密”的进程,便是把“密文”变为“明文”。在这两个进程中,都需求一个要害的东东——叫做“密钥”——来参加数学运算。


2. 啥是“对称加密”?


所谓的“对称加密技能”,意思便是说:“加密”和“解密”运用【相同的】密钥。这个比较好了解。就比方你用 7zip 或 WinRAR 创立一个带暗码(口令)的加密压缩包。当你下次要把这个压缩文件解开的时分,你需求输入【相同的】暗码。在这个比方中,暗码/口令就好像方才说的“密钥”。


3. 啥是“非对称加密”?

所谓的“非对称加密技能”,意思便是说:“加密”和“解密”运用【不同的】密钥。这玩意儿比较难了解,也比较难想到。当年“非对称加密”的创造,还被称为“暗码学”前史上的一次革新。
因为篇幅有限,对“非对称加密”这个论题,俺就不展开了。有空的话,再独自写一篇扫盲。


4. 各自有啥优缺陷?

看完方才的界说,很显然:(从功用视点而言)“非对称加密”精干的作业比“对称加密”要多。这是“非对称加密”的长处。可是“非对称加密”的完成,一般需求涉及到“杂乱数学问题”。所以,“非对称加密”的功能一般要差许多(相对于“对称加密”而言)。
这两者的优缺陷,也影响到了 SSL 协议的规划。


CA 证书的原理及用处

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


HTTPS 协议的需求是啥?

花了许多口水,总算把布景常识说完了。下面正式进入正题。先来说说最初规划 HTTPS 是为了满意哪些需求?
许多介绍 HTTPS 的文章一上来就给你讲完成细节。个人觉得:这是欠好的做法。早在2009年开博的时分,发过一篇《学习技能的三部曲:WHAT、HOW、WHY》,其间谈到“WHY 型问题”的重要性。一上来就给你讲协议细节,你充其量只能知道 WHAT 和 HOW,无法了解 WHY。俺在前一个章节讲了“布景常识”,在这个章节讲了“需求”,这就有助于你了解:最初


为什么

要规划成这样?——这便是 WHY 型的问题。


兼容性

由所以先有 HTTP 再有 HTTPS。所以,HTTPS 的规划者肯定要考虑到对原有 HTTP 的兼容性。
这儿所说的兼容性包含许多方面。比方已有的 Web 运用要尽或许无缝地迁移到 HTTPS;比方对阅读器厂商而言,改动要尽或许小;……
根据“兼容性”方面的考虑,很简单得出如下几个定论:
1. HTTPS 仍是要根据 TCP 来传输
(假如改为 UDP 作传输层,无论是 Web 服务端仍是阅读器客户端,都要大改,动态太大了)
2. 独自运用一个新的协议,把 HTTP 协议包裹起来
(所谓的“HTTP over SSL”,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装。HTTP 协议原有的 GET、POST 之类的机制,根本上原封不动)

打个比方:假如本来的 HTTP 是塑料水管,简单被戳破;那么现在新规划的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管。一来,原有的塑料水管照样运转;二来,用金属加固了之后,不简单被戳破。


可扩展性

前面说了,HTTPS 适当所以“HTTP over SSL”。
假如 SSL 这个协议在“可扩展性”方面的规划满足牛逼,那么它除了能跟 HTTP 调配,还能够跟其它的运用层协议调配。岂不美哉?
现在看来,最初规划 SSL 的人的确比较牛。现在的 SSL/TLS 能够跟许多常用的运用层协议(比方:FTP、SMTP、POP、Telnet)调配,来强化这些运用层协议的安全性。

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


保密性(防泄密)

HTTPS 需求做到满足好的保密性。
提到保密性,首要要能够对立嗅探(行话叫 Sniffer)。所谓的“嗅探”,浅显而言便是监督你的网络传输流量。假如你运用明文的 HTTP 上网,那么监督者经过嗅探,就知道你在拜访哪些网站的哪些页面。
嗅探是最初级的进犯方法。除了嗅探,HTTPS 还需求能对立其它一些略微高档的进犯方法——比方“重放进犯”(后边讲协议原理的时分,会再聊)。


完整性(防篡改)

除了“保密性”,还有一个相同重要的方针是“保证完整性”。关于“完整性”这个概念,在之前的博文《扫盲文件完整性校验——关于散列值和数字签名》中大致提过。健忘的同学再去温习一下。
在创造 HTTPS 之前,因为 HTTP 是明文的,不光简单被嗅探,还简单被篡改。
举个比方:
比方我们天朝的网络运营商(ISP)都比较流氓,常常有网友诉苦说拜访某网站(本来是没有广告的),竟然会跳出许多我国电信的广告。为啥会这样捏?因为你的网络流量需求经过 ISP 的线路才干抵达公网。假如你运用的是明文的 HTTP,ISP 很简单就能够在你拜访的页面中植入广告。
所以,最初规划 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)

文章谈论

程序员必看的十大电影
程序员必看的十大电影
我是怎样打败延迟症的
我是怎样打败延迟症的
程序猿的兴起——Growth Hacker
程序猿的兴起——Growth Hacker
代码女神横空出世
代码女神横空出世
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
老程序员的下场
老程序员的下场
中美印日四国程序员比较
中美印日四国程序员比较
2013年我国软件开发者薪资调查报告
2013年我国软件开发者薪资调查报告
不明白技能不要对懂技能的人说这很简单完成
不明白技能不要对懂技能的人说这很简单完成
怎样成为一名黑客
怎样成为一名黑客
漫画:程序员的作业
漫画:程序员的作业
程序员最惧怕的5件事 你中招了吗?
程序员最惧怕的5件事 你中招了吗?
看13位CEO、开创人和高管怎样进步作业功率
看13位CEO、开创人和高管怎样进步作业功率
“懒”出功率是程序员的美德
“懒”出功率是程序员的美德
 程序员的姿态
程序员的姿态
每天作业4小时的程序员
每天作业4小时的程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
我换岗是因为他们的显示器更大
我换岗是因为他们的显示器更大
程序员周末都喜爱做什么?
程序员周末都喜爱做什么?
Java 与 .NET 的渠道开展之争
Java 与 .NET 的渠道开展之争
Java程序员必看电影
Java程序员必看电影
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
5款最佳正则表达式修改调试器
5款最佳正则表达式修改调试器
游览,写作,编程
游览,写作,编程
团队中“技能大拿”并非越多越好
团队中“技能大拿”并非越多越好
做程序猿的老婆应该留意的一些作业
做程序猿的老婆应该留意的一些作业
程序员都该阅读的书
程序员都该阅读的书
什么才是优异的用户界面规划
什么才是优异的用户界面规划
程序员眼里IE阅读器是什么样的
程序员眼里IE阅读器是什么样的
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
“龌龊的”IT作业排行榜
“龌龊的”IT作业排行榜
总结2014我国互联网十大段子
总结2014我国互联网十大段子
程序员应该重视的一些事儿
程序员应该重视的一些事儿
写给自己也写给你 自己究竟该何去何从
写给自己也写给你 自己究竟该何去何从
60个开发者不容错失的免费资源库
60个开发者不容错失的免费资源库
10个调试和排错的小主张
10个调试和排错的小主张
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
不为人知的编程本相
不为人知的编程本相
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员的轻视链
程序员的轻视链
那些争议最大的编程观念
那些争议最大的编程观念
一个程序员的时刻办理
一个程序员的时刻办理
我的老公是个程序员
我的老公是个程序员
程序员和编码员之间的差异
程序员和编码员之间的差异
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
初级 vs 高档开发者 哪个性价比更高?
初级 vs 高档开发者 哪个性价比更高?
科技史上最臭名远扬的13大罪犯
科技史上最臭名远扬的13大罪犯
软件开发程序过错反常ExceptionCopyright © 2009-2015 MyException 版权所有