![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TLS
文章平均质量分 65
Mrpre
??
展开
-
TLS 1.3 协议详解
TLS 1.3 握手流程详解需要的背景知识: (1):对 TLS 1.2 协议有一定程度的了解,包括秘钥交换、会话复用等。第一节 TLS 1.3 的握手概述协议分析的第一步就是看报文。TLS 1.3的报文,有个特点,就是通过抓包发现,只能看到明文的Client Hello和Server Hello,其余的握手报文均被加密。1-RTT如图: 图1 条件:无条...原创 2018-08-09 10:46:08 · 36401 阅读 · 23 评论 -
Encrypt-then-Mac
Encrypt-then-Mac本文约定如下: M:明文数据 E:加密函数 H:hash函数 MAC:MAC函数 C:密文标准密码学中,对 认证+加密 算法,有如下四种处理方式: 1:Hash-then-Encrypt 2:Mac-then-Encrypt 3:Encrypt-then-Mac 4:Encrypt-and-Mac1:Hash-then-Encrypt,原创 2017-12-16 20:21:24 · 4003 阅读 · 1 评论 -
TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别
我的TLS实现:https://github.com/mrpre/atls/大家可以参考,代码里面的逻辑较清晰。 我的SSL专栏见:https://blog.csdn.net/mrpre/article/category/9270159描述了TLS的各方面。 本文是对前面系列章节关于非对称算法在SSL中运用的总结和细化,但也可以作为详解SSL中RSA、ECDHE非对...原创 2017-09-19 08:50:16 · 65465 阅读 · 38 评论 -
TLS/SSL 协议详解 (24) CFCA蛋疼的事
你永远无法想象中国的证书机构管理证书如此随意,颁发证书如此毫无章法,我举个真实例子:CFCA 颁发过这么恶心的证书链1:他们首先生成2个根证书root1.cer,root2.cer两个根证书,即两个根证书subject不同,一个叫root1另一个叫root2。2:然后生成一个ca.key,用ca.key生成ca1和ca2,分别原创 2017-09-08 09:05:59 · 4735 阅读 · 5 评论 -
TLS/SSL 协议详解 (29) 国密SSL协议
测试服务器:https://47.89.249.43:4433/(测试时,先将本机时间设置为2018年7月之前(我证书过期了),然后使用360国密浏览器访问。360国密浏览器会在TLS握手失败后才会发起GMSSL握手,所以访问较慢。出现访问不了的情况,请清除360国密浏览器所有缓存,重启浏览器后再访问)源码在https://github.com/mrpre/atls上可以获得...原创 2017-09-18 09:18:21 · 35455 阅读 · 25 评论 -
OCSP RFC 翻译 (RFC 2560 RFC 6960)
RFC翻译翻译 2017-12-09 09:29:14 · 2604 阅读 · 0 评论 -
TLS/SSL 协议详解(12) server key exchange
对于使用DHE/ECDHE非对称密钥协商算法的SSL握手,将发送该类型握手。这是ECDHE下,server key exchangeECDHE下主要有几点重要的信息1:指明自己使用的椭圆曲线(一般根据客户端的拓展中supported_groups中的选择椭圆曲线算法)。2:公钥。服务器本地计算一个大数(BIGNUM),乘上曲线的base point,得到原创 2017-09-07 08:36:53 · 16389 阅读 · 10 评论 -
TLS/SSL 协议详解 (16) client key exchange
ECDH/ECDHE下client key exchange如下所示比较简单了,和server key exchange处理一样,客户端随机生成一个大数,然后乘上base point,得到的结果就是public key。04表示uncompression,后面是x和yRSA下,client key exchange如下所示客户原创 2017-09-07 08:56:49 · 8598 阅读 · 4 评论 -
TLS/SSL 协议详解 (4) 运用密码学原理构建安全信道2
密钥的协商、交换 上一节中,我们已经能保证客户端的确是和可信的服务器进行交互了,在保证服务器可信的基础上,接下去,我们要让客户端和服务器之间共享一个密钥,该密钥用来加密后续的会话。密钥协商和交换是SSL的一个关键,也是SSL性能消耗大的地方,而需要消耗如此高性能的直接原因就是,客户端和服务器希望安全的交换或者协商出一个密钥。那么客户端和服务器之间怎么安全的共享一个密钥而又不让其他人...原创 2017-09-06 15:25:35 · 3382 阅读 · 1 评论 -
各种加密模式在TLS协议中的运用 1 (Mac-then-Encrypt)
Mac-then-Encrypt老的算法譬如:TLS_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_RC4_128_MD5 都是mac-then-encrypt模式。加密流程图:上面涉及到2个操作(算上padding计算的话是3个操作)HMAC操作1:计算HMAC,这个HMAC操作就是“MAC-then-encrypt”中的M...原创 2018-02-13 15:03:41 · 5353 阅读 · 2 评论 -
各种加密模式在TLS协议中的运用 2 (AEAD:CCM模式)
AEAD 模式名词解释AE:Authenticated encryption AD:Associated-Data本篇背景知识CBC、各种加密模式在TLS协议中的运用 1、CTR模式与Mac-then-Encrypt不同,AEAD是整个算法流程,同时保证了数据的私密性和完整性。回想MtE和EtM模式, mac和和cipher都是分别计算的;CCMCCM其实是E...原创 2018-02-13 20:43:09 · 8277 阅读 · 1 评论 -
HTTPS优化之动态调整 TLS record size
Dynamic TLS Record Size背景知识1:TCP 分段网络报文对的格式一般都是 mac header + ip header + tcp header + tcp payload由于端对端的网络之间存在不同的链路环境,一个报文传输过程中,经过不同的网络设备,不同的网络设备的MTU不通,即允许传输 ip层数据(算上ip头)不超过MTU大小的报文,如果ip层...原创 2017-11-19 10:29:02 · 2509 阅读 · 0 评论 -
签名算法中rsa_pss_pss_*和rsa_pss_rsae_*的区别
rsa_pss_pss_* 和 rsa_pss_rsae_* 的区别对于签名来说首先,对于签名来说,没区别。都是使用PSS流程进行签名。对于公钥来说有区别说先,加签方需要判断自己的 public key 什么类型,如果 public key是rsaEncryption类型,则用rsa_pss_rsae_表示对应私钥的签名算法OID; 如果自己的public key是 id...原创 2018-07-19 16:44:19 · 2877 阅读 · 1 评论 -
TLS协议中PRF和TLS1.3中的HKDF
TLS 协议中 PRF 和 TLS 1.3 中的 HKDFTLS 1.0/1.1/1.2协议中,使用了PRF算法进行 key derive。 TLS 1.3中使用了标准的HKDF来进行key derive。这里大概先回顾一下 <= TLS 1.2 时密钥导出流程和PRF算法使用场景。 然后再说一下 TLS 1.3 中的HKDF 算法 流程。PRF算法:PRF算法可以生...原创 2018-04-23 21:20:45 · 9244 阅读 · 3 评论 -
RSA的PSCK1 和 PSS 加密、签名封装以及填充方式和实例程序
RSA的PSCK1 和 PSS 加密、签名封装以及填充方式SSA = Signature Scheme with Appendix PSS = Probabilistic Signature Scheme ES = Encryption Schemes SSA是填充、封装格式 PSS是私钥签名流程。 ES 是公钥加密流程。https://tools.ietf.org/html/...原创 2018-03-29 11:41:38 · 14946 阅读 · 7 评论 -
TLS/SSL 协议详解 (28) TLS 1.0、TLS 1.1、TLS 1.2之间的区别
TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txtTLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txtTLS 1.2 RFC http://www.ietf.org/rfc/rfc5246.txtTLS 1.3 见:https://blog.csdn.net/mrpre/article/deta...原创 2017-09-14 11:32:26 · 171778 阅读 · 5 评论 -
TLS/SSL 协议详解 (9) Client hello
SSL报文格式可以大致分为2部分,Record层 和 Handshake层,Record层中指定了后续数据的类型,SSL版本(一般来说固定),以及后续数据的长度。Handshake层欧威Record层的负载,其关系类似TCP层的数据作为IP层的负载。例如上图中显示的那样,SSL报文头部是TVL格式: Content Type: Handshake Version: TLS 1.0 Len...原创 2017-09-06 16:03:29 · 29011 阅读 · 1 评论 -
TLS/SSL 协议详解 (19) Encrypted handshake message
目的:这个报文的目的就是告诉对端自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。其次,这个报文作用就是确认秘钥的正确性。因为Encrypted handshake message是使用对称秘钥进行加密的第一个报文,如果这个报文加解密校验成功,那么就说明对称秘钥是正确的。原理:首先,无论是客户端还是服务端,都会在握手完成之后,发送Encrypted ...原创 2017-09-07 08:58:36 · 12749 阅读 · 10 评论 -
PSK在TLS中的应用
PSK在TLS中的应用之前搞TLS的过程中,PSK的概念有所了解,但是一直觉得他没什么用处,就大致看了一下实现,没深究。但是TLS1.3中居然设计到了PSK的概念,我想有必要在这里总结一下,以免忘记。RFC 4279中详细描述了各个方面。PSK的三种类型PSK-only简单的说,就是client写死一个key,server写死一个key,当然这两个key是一样的。 这个key...原创 2018-02-19 17:23:29 · 10443 阅读 · 10 评论 -
各种加密模式在TLS协议中的运用 3 (AEAD:GCM模式)
GCM,不知道该如何说起,因为涉及到群论、有限域等,先写个大概,有机会再补。域就是我们常见的一个集合,集合中的元素可以进行加减乘除,除了0以外的元素都有逆元。 例如实数域,R = (….,-1, 0, 1, 2, 3, 4 ….)就是一个域,他是无限大小的。 对于任意R中的x1 x2,加减乘的结果还在R中。0是加法单位元,1是乘法单位元。 不严谨的说,域就是一个集合。 好,过。...原创 2018-02-14 14:27:28 · 9888 阅读 · 3 评论 -
OpenSSL心血漏洞分析
SSL 是一种理论,而其具体实现,就有好多了,firefox有自己的实现,旧版本的chrome有自己的实现,Openssl也属于实现的一种。 该漏洞并不是协议上的漏洞,而是针对某个实现的漏洞,说简单点就是:代码写的烂或者考虑不全面。 受影响的OpenSSL版本:OpenSSL 1.0.2-betaOpenSSL 1.0.1 - OpenSSL 1.0.1f原创 2017-09-20 08:42:33 · 3975 阅读 · 0 评论 -
TLS/SSL 协议详解 (25) https双向认证及常见问题总结
预备知识https://blog.csdn.net/mrpre/article/details/77867063http://blog.csdn.net/mrpre/article/details/77866856http://blog.csdn.net/mrpre/article/details/77868263http://blog.csdn.net/mrpre/article...原创 2017-09-09 14:09:24 · 11978 阅读 · 24 评论 -
TLS/SSL 协议详解(10) server hello
Server hello 相对Client hello来说简单的多,Server hello中的内容主要是对Client hello的响应。主要包含几点重要的信息1:随机数(用来生成主密钥和kdf)2:session id(sessionid会话复用需要带上,当然命中session ticket时也需要带上)3:使用的加密套件(根据客户端提供的算法列表、服务器证书类原创 2017-09-06 16:06:58 · 6264 阅读 · 7 评论 -
TLS/SSL 协议详解(14) server hello done
没什么有用信息。原创 2017-09-07 08:38:18 · 3809 阅读 · 1 评论 -
TLS/SSL 协议详解(11) Server Certificate
发送服务器证书,这个不再赘述。将服务器配置的证书(链)发送到客户端。注意证书链的顺序,最下层证书在前(用户证书在前,上级证书在后)。有个技巧,在wireshark右键“导出分组字节流”功能,然后保存证书,是可以变成一个正常证书的(二进制格式)。原创 2017-09-07 08:34:31 · 4366 阅读 · 0 评论 -
TLS/SSL 协议详解 (8) 协议简介
我们大致了解了SSL的流程,以及运用了哪些手段达到了哪些目的。但是前面的描述毕竟不太完善,但这并不妨碍我们了解SSL。 本节,我们将详细介绍SSL协议,结合报文,我们将学习到比第四章的更多的知识。 首先我们通过抓包,分析一下报文的特点。我看可以看出,SSL是建立在TCP之上的应用层协议,现在看起来报文有点乱,我们剔除TCP之后再看看:原创 2017-09-06 15:47:35 · 3275 阅读 · 0 评论 -
TLS/SSL 协议详解 (7) SSL 数字证书的一些细节2
证书格式 编码格式证书编码格式多种,但是不要根据文件后缀名(der,cer)等区分证书格式。总的来说,证书分为2种,一种是二进制的、一种是进行base64编码的证书。前者使用notepad或者任意文本编辑器打开,显示乱码,后者则显示正常的base64编码后的数据。下图为经过base64编码后的证书,由BEGAIN和END包括。(老司机可能就发现了,有点像长了...原创 2017-09-06 15:42:47 · 3211 阅读 · 3 评论 -
TLS/SSL 协议详解(6) SSL 数字证书的一些细节1 证书验证
证书关系到了SSL的众多安全性,比如身份认证,密钥交换。所以有必要单拉出一章来讲证书。本章完善一下前几节中的身份认证的一些缺点。首先,通过前面讲解,我们知道,证书需要几个重要的字段。例如“拥有者”、“颁发者”、“截止日期”。另外,生成证书的时候会自动生成一份“公钥”以及对应的“私钥”。现在假设我开了一个网站,准备用SSL加密的,需要让全世界信任我这个网站,那么我就需要一个证书,这时候...原创 2017-09-06 15:37:22 · 6128 阅读 · 6 评论 -
TLS/SSL 协议详解 (5) 运用密码学原理构建安全信道3
保证数据的完整性 到目前为止,我们后续的报文可以加密通信了。现在只要保证,后续加密的数据不被篡改就行了,或者说,SSL需要辨别数据是否被篡改的能力。 这时候摘要就派上用场了。回顾第三章中,我们提到的摘要的特性: 1:不同的数据,即使是一字节改变,其摘要的结果变化非常大。 2:无论摘要的输入长度是多少,其输出是固定长度,对于MD5而言输出16字节,对于SHA1而...原创 2017-09-06 15:28:53 · 2949 阅读 · 0 评论 -
TLS/SSL 协议详解(3) 运用密码学原理构建安全信道1
上一节的知识很大程度上是数学意义上的知识,本章将讲解如何使用这些数学意义上的东西,使其体现出实际应用的价值。本章将站在设计者的角度,考虑如何构建一条安全的信道。 身份认证 首先,之前建行网银的例子告诉我们,要进行安全的加密通信,前提是自己的确和自己想要的对端进行通信,而不是别人,为了和可信的对端进行通信,我们需要一定的手段进行或者说研究出一定的手段,进行身份认证。在这里我们就用...原创 2017-09-06 15:23:23 · 5123 阅读 · 0 评论 -
TLS/SSL 协议详解 (2) SSL有关的密码学原理
对称加(解)密加密和解密使用同样的密钥。举个例子就知道了。假设现在有一段明文:0010 1101 1110 0101以及一个密钥:0111我们定义加密方式是“异或”,4 bit一加密。 那么 0010 1101 1110 0101 最终将会加密成 0101 1010 1001 0010。如果我们想要解密,那么只需要将0101 1010 1001 0010与 ...原创 2017-09-06 15:16:30 · 4380 阅读 · 2 评论 -
TLS/SSL 协议详解(15) client certificate
如果服务器端请求了客户端的证书,客户端即使没有证书,也需要发送该类型的握手报文,只是这种情况下,里面的内容为0。如果浏览器有对应的证书,则会发送证书,当然,也有可能发送上级证书(即发送证书链),这个完全取决于浏览器。特别说明一点,我亲眼见过IE带了一个错误的上级证书发送到服务器,这个简直亮瞎了我。原创 2017-09-07 08:55:35 · 4645 阅读 · 0 评论 -
TLS/SSL 协议详解(17) Certificate verify
发送这个类型的握手需要2个前提条件(1):服务器端请求了客户端证书(2):客户端发送了非0证书 此时,客户端想要证明自己拥有该证书,必然需要私钥签名一段数据发给服务器验证。签名的数据是客户端发送certificate verify前,所有收到和发送的握手信息(不包括5字节的record)。其实这个流程和签名server key exchange基本一样。计算摘要,然后签原创 2017-09-07 08:57:26 · 4104 阅读 · 5 评论 -
TLS/SSL 协议详解(18) Change cipher
这是一个无关紧要的数据。在TLS1.3中就被废弃了(可以发送、也可以不发送)。需要注意的是,该数据本身不被计算握手摘要,因为它的type不是Handshake。发送改报文表示自己后续的发送数据会被新秘钥加密,所以一般开源代码的处理流程,是在读到该数据时,去计算(derive) read侧的密钥(即解密密钥、解密hmac密钥,解密IV),然后调用read函数时就自然而然的进行解密了。...原创 2017-09-07 08:58:04 · 2481 阅读 · 0 评论 -
TLS/SSL 协议详解 (31)TLS1.1 TLS1.2 在CBC模式下两种不同的加解密方式及优化思考
SSL优化原创 2017-09-26 11:24:56 · 8317 阅读 · 2 评论 -
TLS/SSL 协议详解 (27) SSL 随机数的作用
SSL随机数分为client random、server random,分别由客户端和服务器生成然后通过client hello和server hello发送给对方。这里不讲其他的随机数包括client key exchange的随机数,ECC签名时的随机数等。 在协议实现上,SSL随机数充当了重要的角色,在各重要阶段被使用。 (1)生成maste...原创 2017-09-14 09:06:18 · 10962 阅读 · 4 评论 -
TLS/SSL 协议详解 (22)TLS1.3
详细分析见:https://blog.csdn.net/mrpre/article/details/81532469。大致说一下改变 1:椭圆曲线选择有变化,剔除了RSA加密算法。2:为了减少rtt,在client hello前,中根据所有服务器可能使用的椭圆曲线算法,计算出一系列pubkey,添加在client hello的拓展中。3:服务器收到client hello 之后...原创 2017-09-08 08:55:44 · 3283 阅读 · 0 评论 -
TLS/SSL 协议详解 (22)会话复用
由于SSL握手的非对称运算无论是RSA还是ECDHE,都会消耗性能,故为了提高性能,对于之前已经进行过握手的SSL连接,尽可能减少握手round time trip以及运算。 SSL提供2中不同的会话复用机制。1:session id会话复用 对于已经建立的SSL会话,使用session id为key(session id来自第一次请求的server hello中的sessi...原创 2017-09-08 08:35:41 · 16535 阅读 · 8 评论 -
TLS/SSL 协议详解(13) certificate request
双向认证时,服务器会发送certificate request,表明自己想要收到客户端的证书。 这个类型的握手主要包含了ca证书的subject,用以告诉客户端自己需要哪些证书,不是由这些ca签发的证书“我”不要。 客户端,例如浏览器在收到这个请求时,如果不存在对应的证书,则发送一个空的certificate至服务器,如果存在一个证书,则发送该certificate至服务器。如果存在多原创 2017-09-07 08:37:29 · 5713 阅读 · 0 评论 -
TLS/SSL 协议详解 (23) HTTPS实际应用碰到的问题
在实际使用中,也衍生出了许多新的技术以及规范,用来更好的支持SSL。1:OCSP2:证书透明度3:HSTS/Preload List4:CSP原创 2017-09-08 09:04:20 · 1503 阅读 · 0 评论