HTTPS(SSL/TLS) 原理之深入浅出
注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合。
1. 必要的加密解密基础知识
1)对称加密算法:就是加密和解密使用同一个密钥的加密算法。因为加密方和解密方使用的密钥相同,所以称为称为对称加密,也称为单钥加密方法。
优点是:加密和解密运算速度快,所以对称加密算法通常在消息发送方需要加密大量数据时使用;
缺点是:安全性差,如果一方的密钥遭泄露,那么整个通信就会被破解。另外加密之前双方需要同步密钥;
常用对称加密算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等;
2)非对称加密算法:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
公钥和私钥是一对:公钥用来加密,私钥解密,而且公钥是公开的,私钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
有点是:安全性更好,私钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
缺点是:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
常用的非对称加密算法有:RSA、Elgamal、Rabin、D-H、ECC等;
3)HASH算法:也称为消息摘要算法。将任意长度的二进制值映射为较短的固定长度的二进制值,该二进制值称为哈希值。
常用于检验数据的完整性,检验数据没有被篡改过。常见的又 MD5(MD系列),SHA-1(SHA系列)
HTTPS 使用到了上面全部三种加密算法。
2. HTTPS 的作用
HTTPS简单而言,即使建立在SSL/TLS协议之上的HTTP。不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
(1) 所有信息都是加密传播,第三方无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。
互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。
3. HTTPS 的历史
互联网加密通信协议的历史,几乎与互联网一样长。
1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的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。
4. 基本的运行过程
HTTPS 的基本运行过程:
1)利用对称加密算法来加密网页内容,那么如何保证对称加密算法的秘钥的安全呢?
2)使用非对称加密算法来获得对称加密算法的秘钥,从而保证了对称加密算法的秘钥的安全,也就保证了对称加密算法的安全。
这里这样安排使用的原理是,利用了对称加密算法和非对称加密算法优点,而避免了它们的缺点。利用了对称加密算法速度快,而非对称加密算法安全的优点;同时巧妙的避免了对称加密算法的不安全性,以及需要同步密钥的缺点,也避免了非对称加密算法的速度慢的缺点。实在是巧妙了。
这里有两个问题:
(1)如何保证非对称加密算法公钥不被篡改?
解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
(2)公钥加密计算量太大,如何减少耗用的时间?
解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密算法,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。(也就是网页内容的加密使用的是对称加密算法)
因此,SSL/TLS协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证非对称加密算法的公钥。
(2) 双方协商生成对称加密算法的"对话密钥"。
(3) 双方采用对称加密算法和它的"对话密钥"进行加密通信。
上面过程的前两步,又称为"握手阶段"(handshake)。
5. 握手阶段的详细过程
"握手阶段"涉及四次通信,我们一个个来看。需要注意的是,"握手阶段"的所有通信都是明文的。
1) 客户端发出请求(ClientHello)
首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。
在这一步,客户端主要向服务器提供以下信息。
(1) 浏览器支持的SSL/TLS协议版本,比如TLS 1.0版。
(2) 一个浏览器客户端生成的随机数,稍后用于生成对称加密算法的"对话密钥"。
(3) 浏览器支持的各种加密方法,对称的,非对称的,HASH算法。比如RSA非对称加密算法,DES对称加密算法,SHA-1 hash算法。
(4) 浏览器支持的压缩方法。
这里需要注意的是,客户端发送的信息之中不包括服务器的域名。也就是说,理论上服务器只能包含一个网站,否则会分不清应该向客户端提供哪一个网站的数字证书。这就是为什么通常一台服务器只能有一张数字证书的原因。
对于虚拟主机的用户来说,这当然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,允许客户端向服务器提供它所请求的域名。
2) 服务器回应(SeverHello)
服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容。
(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成对称加密算法的"对话密钥"。
(3) 确认使用的各种加密方法,比如确认算法使用:RSA非对称加密算法,DES对称加密算法,SHA-1 hash算法
(4) 服务器证书。
除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。
3) 客户端回应
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
如果证书没有问题,客户端就会从证书中取出服务器的非对称加密算法的公钥。然后,向服务器发送下面三项信息。
(1) 一个随机数。该随机数用服务器发来的公钥进行的使用非对称加密算法加密,防止被窃听。
(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送(比如确认使用:RSA非对称,DES对称,SHA-1 hash算法)。
(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的对称加密算法,各自生成本次会话所用的同一把"会话密钥"。也就是说浏览器和服务器各自使用同一个对称加密算法,对三个相同的随机数进行加密,获得了,用来加密网页内容的 对称加密算法的秘钥。(注意:这里浏览器的三个随机数都是明文的,但是服务端获得的"pre-master key"是密文的,所以服务器需要使用非对称加密算法的私钥,来先解密获得"pre-master key"的明文,在来生成对称加密算法的秘钥。这样的目的是为了防止:"pre-master key"被窃听,因为发送明文会被窃听,但是发生的是非对称加密算法的加密过后的密文,因为窃听者不知道私钥,所以即使窃听了,也无法解密出其对应的明文。从而保证了最后生成的:用于加密网页内容的对称加密算法的秘钥的安全性!!!)
至于为什么一定要用三个随机数,来生成"会话密钥",dog250解释得很好:
"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。
对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。
pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的 可不是一。"
这里:其实如果 pre-master-key 和 浏览器生成的随机数都可能被猜出来,那么最后生成的对称加密算法的秘钥就是不安全的。因为三个随机数都可能被窃听到了。
此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。
4) 服务器的最后回应
服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的对称加密算法的"会话密钥"。然后,向客户端最后发送下面信息。
(1)编码改变通知,表示随后的信息都将用双方商定的对称加密算法和密钥进行加密。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。
参考链接
- MicroSoft TechNet, SSL/TLS in Detail
- Jeff Moser, The First Few Milliseconds of an HTTPS Connection
- Wikipedia, Transport Layer Security
- StackExchange, How does SSL work?
(完)
=======================================
注:
本文主要修改自:SSL/TLS协议运行机制的概述
仅仅按照自己的理解,进行了一些修改,和补充,以利于自己理解。可能会存在自己理解上的错误。
另外参考了:HTTPS那些事(一)HTTPS原理
本文如果结合 HTTPS连接的前几毫秒发生了什么 一起来理解HTTPS,将理解的更加深入。
总结:
1)HTTPS 结合使用了 非对称加密算法,对称加密算法,hash算法,分别利用他们的优势,避免他们的缺点。利用非对称加密算法获得对称加密算法的秘钥,保证他的安全性;然后实际的网页内容的加密使用的是对称加密算法,利用了对称加密算法速度快的优势,hash算法主要是防止篡改的发生,是一种校验机制,最后数字证书,保证了服务器在将非对称加密算法的公钥传给浏览器时的安全性(不会被中间人篡改),同时也标志了服务器的身份。
2)HTTPS的四大金刚:
非对称加密算法(对称加密算法的秘钥) + 对称加密算法(加密内容) + 数字证书(防止篡改非对称加密算法的公钥) + HASH算法(防止篡改消息)== HTTPS
3)HTTPS的本质是什么?
HTTPS的本质就是在HTTP连接发起之前,先使用SSL/TLS协议,协调客户端和服务端,在两端各自生产一个对称加密算法的秘钥,
然后使用普通的HTTP协议传输 经过对称加密算法加密的网页内容。因为对称加密算法的秘钥是安全的,所以对称加密算法加密的网页内容也是安全的。
HTTPS(SSL/TLS) 原理之深入浅出的更多相关文章
- SSL/TLS 原理详解
本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...
- [No0000126]SSL/TLS原理详解与WCF中的WS-Security
SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...
- SSL/TLS原理详解
本文大部分整理自网络,相关文章请见文后参考. 关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 ,如果你想快速自建CA然后签发数字证书,请移步 基于OpenS ...
- 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS) -- 学习
在 ASP.NET MVC 中使用 HTTPS (SSL/TLS) IS 7如何实现http重定向https HTTPS 升级指南
- 简而意赅 HTTP HTTPS SSL TLS 之间有什么不同
HTTP HTTPS SSL TLS 之间有什么不同? SSL是Secure Sockets Layer的缩写.SSL的作用是为网络上的两台机器或设备提供了一个安全的通道. TLS是SSL的一个新的名 ...
- HTTPS SSL TLS 相关理解
1,在理解 HTTPS SSL TLS 之前先对常用的加密方式进行一个简述: (1),对称加密: 采用一个密钥,对明文进行加密生成密文,相反采用此密钥可对加密后的密文进行解密还原成明文. 代表算法有, ...
- HTTPS SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- [skill][https][ssl/tls] HTTPS相关知识汇总
结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA DHE / ECDHE PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...
- SSL/TLS原理详解2
引用原文地址:https://segmentfault.com/a/1190000004985253#articleHeader6 在进行 HTTP 通信时,信息可能会监听.服务器或客户端身份伪装等安 ...
随机推荐
- SQL Server里ORDER BY的歧义性
在今天的文章里,我想谈下SQL Server里非常有争议和复杂的话题:ORDER BY子句的歧义性. 视图与ORDER BY 我们用一个非常简单的SELECT语句开始. -- A very simpl ...
- 关于eclipse中MAVEN WEB工程中编译问题
这几天是被java的环境搞疯了,我先是搭了一个spring+springmvc+mybatis的工程,在家里跑了一下,没有问题,把工程带到公司里用,却一直不能使用. 按常理来说,只要工程发生一点变化, ...
- UWP开发入门(十六)——常见的内存泄漏的原因
本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏>中提到过,即使有 ...
- 基于HTML5技术的电力3D监控应用(三)
继(一)和(二)之后不少,不少网友问我移动终端的使用问题,因为我们项目这次采用Android平板终端,所以我对这方面有点肤浅的研究,这篇分享些项目经验总结,希望对大家有所帮助. 电力3D项目去年底刚立 ...
- Java魔法堂:注释和注释模板
一.注释 1. 注释类型 [a]. 单行注释 // 单行注释 String type = "单行注释"; [b]. 多行注释 /* * 多行注释 */ String type ...
- SQL Server 2005 Service Broker
一.引言 SQL Server 2005 的一个主要成就是可以实现可靠.可扩展且功能完善的数据库应用程序.与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重 ...
- android 获取当前位置
1. Android开发位置感知应用程序方式:1. GPS 定位 精确度高,仅适用于户外,严重消耗电量.如果手机内置GPS接受模块,即使手机处于信号盲区,依然可以获取位置信息. 2. NETW ...
- 设计模式--中介(Mediator)模式
时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...
- 【循序渐进学Python】1. Python基础知识
1. Python安装和配置 首先需要到Python的官方网站(http://www.python.org/getit/) 下载安装包,现在Python的发行版分为兼容之前Python程序的Pytho ...
- knockoutjs+jquery.gridgroup 实现table数据加载和行合并
目标 使用ajax获取到json数据后,通过ko绑定到表格,然后通过jquery.gridgroup插件实现行合并,效果如下: 步骤 1.引入插件 <script src="~/Scr ...