
SSL/TLS
sosfnima
我是个好人
展开
-
TLS/SSL 协议详解(1) 前言
本文转自 https://blog.youkuaiyun.com/mrpre/article/details/77866773首先,需要清楚SSL是什么。 很多人把SSL和 HTTPS混为一谈,认为SSL就是HTTPS,其实不尽然。SSL全称是“Secure Socket Layer”,字面上可以从“Secure”单词可以看出,SSL是负责“安全”传输的,并不关心传输的内容是什么。而HTTPS只是S...转载 2018-11-13 20:54:49 · 1477 阅读 · 0 评论 -
TLS/SSL 协议详解(13) certificate request
双向认证时,服务器会发送certificate request,表明自己想要收到客户端的证书。 这个类型的握手主要包含了ca证书的subject,用以告诉客户端自己需要哪些证书,不是由这些ca签发的证书“我”不要。 客户端,例如浏览器在收到这个请求时,如果不存在对应的证书,则发送一个空的certificate至服务器,如果存在一个证书,则发送该certificate至服务器。如果存在多...转载 2018-11-14 22:45:56 · 3921 阅读 · 0 评论 -
TLS/SSL 协议详解(15) client certificate
如果服务器端请求了客户端的证书,客户端即使没有证书,也需要发送该类型的握手报文,只是这种情况下,里面的内容为0。如果浏览器有对应的证书,则会发送证书,当然,也有可能发送上级证书(即发送证书链),这个完全取决于浏览器。特别说明一点,我亲眼见过IE带了一个过期的上级证书发送到服务器,这个简直亮瞎了我。--------------------- 作者:Mrpre 来源:优快云 原文...转载 2018-11-19 09:51:10 · 4094 阅读 · 0 评论 -
TLS/SSL 协议详解 (16) client key exchange
1 ECDH/ECDHE下client key exchange如下所示比较简单了,和server key exchange处理一样,客户端随机生成一个大数,然后乘上base point,得到的结果就是public key。04表示uncompression,后面是x和y2 RSA下,client key exchange如下所示客户端随机生成48字节的预主密钥,然后使用p...转载 2018-11-19 09:53:07 · 5800 阅读 · 0 评论 -
TLS/SSL 协议详解(17) Certificate verify
发送这个类型的握手需要2个前提条件(1):服务器端请求了客户端证书(2):客户端发送了非0长的证书 此时,客户端想要证明自己拥有该证书,必然需要私钥签名一段数据发给服务器验证。签名的数据是客户端发送certificate verify前,所有收到和发送的握手信息(不包括5字节的record)。其实这个流程和签名server key exchange基本一样。计算摘要,然...转载 2018-11-19 09:55:42 · 6012 阅读 · 0 评论 -
TLS/SSL 协议详解(18) Change cipher
这是一个无关紧要的数据。在TLS1.3中就被废弃了。需要注意的是,该数据本身不被计算握手摘要,因为它的type不是Handshake。一般开源代码在读到该数据时,计算(derive) read侧的密钥(即解密密钥、解密hmac密钥,解密IV),然后调用read函数时就自然而然的进行解密了。--------------------- 作者:Mrpre 来源:优快云 原文:http...转载 2018-11-19 09:56:52 · 1880 阅读 · 0 评论 -
TLS/SSL 协议详解 (19) Encrypted handshake message
其实这个报文的目的就是告诉对端自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。 其次,这个报文作用就是确认秘钥的正确性。因为Encrypted handshake message是使用对称秘钥进行加密的第一个报文,如果这个报文加解密校验成功,那么就说明对称秘钥是正确的。 计算方法也比较简单,将之前所有的握手数据(包括接受、发送),计算md运算,然后计算...转载 2018-11-19 10:00:25 · 3689 阅读 · 0 评论 -
TLS/SSL 协议详解 (20)加密套件的选择
服务器在选择算法时,会有优先级,是以客户端提供的的为最优,还是服务器端配置的为最优。所谓的客户端最优,就是根据客户端提供的加密套件,从上到下,看是否有本地支持的,有的话则使用。所谓服务器端最优,就是服务器端根据自身配置的加密套件顺序,一个个在client hello中找,找到了就使用。 其次,当服务器配置ECC证书时,加密套件只能选择XXX_ECDSA_XXX或者ECDH_XXX。当服...转载 2018-11-19 10:02:23 · 6630 阅读 · 0 评论 -
TLS/SSL 协议详解(21)证书的选择
由于存在多域名对应一个ip的情况,所以通常会使用SNI来选择证书,这个不再赘述,只要上线过SSL,就会碰到这个问题。 实际使用中还会碰到选择不同公钥算法的证书,例如服务器可能配置2个证书,一个RSA证书,一个ECC证书。通常也会根据客户端提供的加密套件,来选择不同的证书。毕竟使用ECC证书,是跳过了RSA运算,性能可以大幅提高,理论上安全性也相对较高。 至于证书机构,还是不...转载 2018-11-19 10:03:28 · 1231 阅读 · 1 评论 -
TLS/SSL 协议详解(12) server key exchange
对于使用DHE/ECDHE非对称密钥协商算法的SSL握手,将发送该类型握手。RSA算法不会继续该握手流程(DH、ECDH也不会发送server key exchange)。 1:ECDHE下,server key exchange 如下图 ECDHE下主要有几点重要的信息 1:指明自己使用的椭圆曲线(一般根据客户端的拓展中supported_groups中的...转载 2018-11-14 22:43:11 · 9414 阅读 · 2 评论 -
TLS/SSL 协议详解(11) Server Certificate
发送服务器证书,这个不再赘述。将服务器配置的证书(链)发送到客户端。注意证书链的顺序,最下层证书在前(用户证书在前,上级证书在后)。发送的证书是二进制格式,并非base64之后的格式。有个技巧,在wireshark右键“导出分组字节流”功能,然后保存证书,是可以变成一个正常证书的(二进制格式)。--------------------- 作者:Mrpre 来源:优快云 原文:...转载 2018-11-14 22:38:44 · 2569 阅读 · 0 评论 -
TLS/SSL 协议详解(10) server hello
Server hello 相对Client hello来说简单的多,Server hello中的内容主要是对Client hello的响应。主要包含几点重要的信息1:确定协商使用的TLS版本号(TLS1.0 or TLS 1.1 or TLS 1.2)。2:随机数(用来生成主密钥和kdf)3:session id(sessionid会话复用需要带上,当然命中session ti...转载 2018-11-14 22:36:49 · 5559 阅读 · 0 评论 -
TLS/SSL 协议详解 (2) SSL有关的密码学原理
本文转自 https://blog.youkuaiyun.com/mrpre/article/details/778668241:对称加(解)密加密和解密使用同样的密钥。举个例子就知道了。假设现在有一段明文:0010 1101 1110 0101,以及一个密钥:0111,我们定义加密方式是“异或”,4 bit一加密。那么0010 1101 1110 0101 最终将会转换成 0101 1010 10...转载 2018-11-13 20:56:35 · 846 阅读 · 0 评论 -
TLS/SSL 协议详解(3) 运用密码学原理构建安全信道1
上一节的知识很大程度上是数学意义上的知识,本章将讲解如何使用这些数学意义上的东西,使其体现出实际应用的价值。本章将站在设计者的角度,考虑如何构建一条安全的信道。1:身份认证首先,之前建行网银的例子告诉我们,要进行安全的加密通信,前提是自己的确和自己想要的对端进行通信,而不是别人,为了和可信的对端进行通信,我们需要一定的手段进行或者说研究出一定的手段,进行身份认证。在这里我们就用到了证书。...转载 2018-11-13 22:00:28 · 621 阅读 · 0 评论 -
TLS/SSL 协议详解 (4) 运用密码学原理构建安全信道2
密钥的协商、交换 上一节中,我们已经能保证客户端的确是和可信的服务器进行交互了,在保证服务器可信的基础上,接下去,我们要让客户端和服务器之间共享一个密钥,该密钥用来加密后续的会话。密钥协商和交换是SSL的一个关键,也是SSL性能消耗大的地方,而需要消耗如此高性能的直接原因就是,客户端和服务器希望安全的交换或者协商出一个密钥。 那么客户端和服务器之间怎么安全的共享一个密钥而又...转载 2018-11-13 22:19:05 · 1040 阅读 · 0 评论 -
TLS/SSL 协议详解 (5) 运用密码学原理构建安全信道3
保证数据的完整性 到目前为止,我们后续的报文可以加密通信了。现在只要保证,后续加密的数据不被篡改就行了,或者说,SSL需要辨别数据是否被篡改的能力。 这时候摘要就派上用场了。回顾第三章中,我们提到的摘要的特性: 1:不同的数据,即使是一字节改变,其摘要的结果变化非常大。 2:无论摘要的输入长度是多少,其输出是固定长度,对于MD5而言输出16字节,对于SHA1而言,输出...转载 2018-11-13 22:20:35 · 760 阅读 · 0 评论 -
TLS/SSL 协议详解(6) SSL 数字证书的一些细节1
证书关系到了SSL的众多安全性,比如身份认证,密钥交换。所以有必要单拉出一章来讲证书。本章完善一下前几节中的身份认证的一些缺点。 首先,通过前面讲解,我们知道,证书需要几个重要的字段。例如“拥有者”、“颁发者”、“截止日期”。另外,生成证书的时候会自动生成一份“公钥”以及对应的“私钥”。现在假设我开了一个网站,准备用SSL加密的,需要让全世界信任我这个网站,那么我就需要一个证书,...转载 2018-11-14 21:33:52 · 831 阅读 · 3 评论 -
TLS/SSL 协议详解 (7) SSL 数字证书的一些细节2
证书格式编码格式证书编码格式多种,但是不要根据文件后缀名(der,cer)等区分证书格式。总的来说,证书分为2种,一种是二进制的、一种是进行base64编码的证书。前者使用notepad或者任意文本编辑器打开,显示乱码,后者则显示正常的base64编码后的数据。下图为经过base64编码后的证书,由BEGAIN和END包括。(老司机可能就发现了,有点像长了一点的迅雷下载链接) ...转载 2018-11-14 21:47:48 · 1871 阅读 · 0 评论 -
TLS/SSL 协议详解 (8) 协议简介
我们大致了解了SSL的流程,以及运用了哪些手段达到了哪些目的。但是前面的描述毕竟不太完善,但这并不妨碍我们了解SSL。 本节,我们将详细介绍SSL协议,结合报文,我们将学习到比第四章的更多的知识。 首先我们通过抓包,分析一下报文的特点。 我看可以看出,SSL是建立在TCP之上的应用层协议,现在看起来报文有点乱,我们剔除TCP之后再看看: 好了,这下简洁明了多了,如果你熟...转载 2018-11-14 21:54:20 · 1390 阅读 · 0 评论 -
TLS/SSL 协议详解 (9) Client hello
SSL报文格式可以大致分为2部分,Record层 和 Handshake层,Record层中指定了后续数据的类型,SSL版本(一般来说固定),以及后续数据的长度。Handshake层欧威Record层的负载,其关系类似TCP层的数据作为IP层的负载。例如上图中显示的那样,SSL报文头部是TVL格式: Content Type: Handshake Version: TLS 1...转载 2018-11-14 22:15:23 · 6422 阅读 · 0 评论 -
TLS/SSL 协议详解 (22)会话复用
由于SSL握手的非对称运算无论是RSA还是ECDHE,都会消耗性能,故为了提高性能,对于之前已经进行过握手的SSL连接,尽可能减少握手round time trip以及运算。 SSL提供2中不同的会话复用机制。1:session id会话复用 对于已经建立的SSL会话,使用session id为key(session id来自第一次请求的server hello中的session...转载 2018-11-19 10:06:23 · 6907 阅读 · 0 评论