tls_贪婪算法 - CSDN
tls 订阅
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。 展开全文
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。
信息
外文名
Transport Layer Security
简    称
TLS
中文名
安全传输层协议
TLS简介
传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如Google、Facebook等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。 [1] 
收起全文
精华内容
参与话题
  • 什么是TLS

    2019-06-27 08:40:26
    最近在Istio实验中经常遇到HTTP,HTTPS,TLS等名词,感觉忘得差不多,需要复习一下计算机网络的知识了。 本文参考 http://www.techug.com/post/https-ssl-tls.html ... ...

        最近在Istio实验中经常遇到HTTP,HTTPS,TLS等名词,感觉忘得差不多,需要复习一下计算机网络的知识了。

       本文参考   http://www.techug.com/post/https-ssl-tls.html

                        https://blog.fleeto.us/post/istio-security-notes/

    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 被广泛使用过。

    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”的方式。

    Istio双向 TLS 支持

    双向 TLS 支持主要针对的是通信方面,把明文传输的服务通信,通过转换为 Envoy 之间的加密通信。这一安全设置较为基础,可以在全局、Namespace 或者单个服务的范围内生效。

    这一功能主要通过两个 Istio CRD 对象来完成:

    Policy

    例如 Basic Authentication Policy 中的一个样例,用于给单个服务设置 mtls:

    apiVersion: "authentication.istio.io/v1alpha1"
    kind: "Policy"
    metadata:
      name: "example-2"
    spec:
      targets:
      - name: httpbin
      peers:
      - mtls:
    

    其中 target 是可选项,如果去掉的话,作用域将扩展到整个 Namespace。

    DestinationRule

    同样的一个例子里面的目标规则如下:

    apiVersion: "networking.istio.io/v1alpha3"
    kind: "DestinationRule"
    metadata:
      name: "example-2"
    spec:
      host: httpbin.bar.svc.cluster.local
      trafficPolicy:
        tls:
          mode: DISABLE
        portLevelSettings:
        - port:
            number: 1234
          tls:
            mode: ISTIO_MUTUAL
    

    这个也很容易理解,这一规则用于指派对该地址的访问方式:

    • tls.mode = DISABLE,这个服务缺省是不开启 tls 支持的,如果取值 ISTIO_MUTUAL,则代表这个地址(服务)的所有端口都开启 TLS。
    • port...ISTIO_MUTUAL,只针对这一个端口启用 mTLS 支持。

    创建 Policy 之后,Citadel 会生成证书文件,并传递给 Envoy,我们可以在 Envoy 容器(kube-proxy)的 /etc/certs/ 目录中看到这几个 *.pem 文件。如果使用 openssl x509 -text -noout 查看 cert-chain.pem 的证书内容,会看到 spiffe 编码的 ServiceAccount 内容来作为 SAN:

     X509v3 Subject Alternative Name:
                URI:spiffe://cluster.local/ns/default/sa/default
    

    规则生效之后,原有的服务间调用是没有差异的,但是如果在网格之外,就必须 https,结合上面谈到的证书来访问目标服务才能完成访问。

     

     

    转载于:https://www.cnblogs.com/yuxiaoba/p/9232427.html

    展开全文
  • 图解SSL/TLS协议

    万次阅读 2014-11-11 17:03:07
    转载http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

    转载http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

    本周,CloudFlare宣布,开始提供Keyless服务,即你把网站放到它们的CDN上,不用提供自己的私钥,也能使用SSL加密链接。

    我看了CloudFlare的说明(这里这里),突然意识到这是绝好的例子,可以用来说明SSL/TLS协议的运行机制。它配有插图,很容易看懂。

    下面,我就用这些图片作为例子,配合我半年前写的《SSL/TLS协议运行机制的概述》,来解释SSL协议。

    一、SSL协议的握手过程

    开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。

    假定客户端叫做爱丽丝,服务器叫做鲍勃,整个握手过程可以用下图说明(点击看大图)。

    握手阶段分成五步。

    第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

    第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

    第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。

    第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。

    第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

    上面的五步,画成一张图,就是下面这样。

    二、私钥的作用

    握手阶段有三点需要注意。

    (1)生成对话密钥一共需要三个随机数。

    (2)握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密钥"(非对称加密),无其他作用。

    (3)服务器公钥放在服务器的数字证书之中。

    从上面第二点可知,整个对话过程中(握手阶段和其后的对话),服务器的公钥和私钥只需要用到一次。这就是CloudFlare能够提供Keyless服务的根本原因。

    某些客户(比如银行)想要使用外部CDN,加快自家网站的访问速度,但是出于安全考虑,不能把私钥交给CDN服务商。这时,完全可以把私钥留在自家服务器,只用来解密对话密钥,其他步骤都让CDN服务商去完成。

    上图中,银行的服务器只参与第四步,后面的对话都不再会用到私钥了。

    三、DH算法的握手阶段

    整个握手阶段都不加密(也没法加密),都是明文的。因此,如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。

    虽然理论上,只要服务器的公钥足够长(比如2048位),那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为Diffie-Hellman算法(简称DH算法)。DH算法的详细介绍->http://blog.csdn.net/fw0124/article/details/8462373

    采用DH算法后,Premaster secret不需要传递,双方只要交换各自的参数,就可以算出这个随机数。

    上图中,第三步和第四步由传递Premaster secret变成了传递DH算法所需的参数,然后双方各自算出Premaster secret。这样就提高了安全性。

    四、session的恢复

    握手阶段用来建立SSL连接。如果出于某种原因,对话中断,就需要重新握手。

    这时有两种方法可以恢复原来的session:一种叫做session ID,另一种叫做session ticket。

    session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥",而不必重新生成一把。

    上图中,客户端给出session ID,服务器确认该编号存在,双方就不再进行握手阶段剩余的步骤,而直接用已有的对话密钥进行加密通信。

    session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。

    上图中,客户端不再发送session ID,而是发送一个服务器在上一次对话中发送过来的session ticket。这个session ticket是加密的,只有服务器才能解密,其中包括本次对话的主要信息,比如对话密钥和加密方法。当服务器收到session ticket以后,解密后就不必重新生成对话密钥了。

    (完)

    展开全文
  • HTTPS、SSL、TLS三者之间的联系和区别

    万次阅读 多人点赞 2018-08-17 17:52:54
    SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For ...

    SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For Comments 请求注释),RFC里包含了很多互联网技术的规范!

    起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL/TCP的简称。

    由于HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”,如果想更深层次的了解TLS的工作原理可以去RFC的官方网站:www.rfc-editor.org,搜索RFC2246即可找到RFC文档! ——以上就是历史背景

    SSL 是指安全套接字层,简而言之,它是一项标准技术,可确保互联网连接安全,保护两个系统之间发送的任何敏感数据,防止网络犯罪分子读取和修改任何传输信息,包括个人资料。两个系统可能是指服务器和客户端(例如,浏览器和购物网站),或两个服务器之间(例如,含个人身份信息或工资单信息的应用程序)。

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。
    1. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义
    2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”)
    3. 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别)
    4. 大致了解 CA 证书的用途   5.TCP通信协议的几次握手

    TLS(传输层安全)是更为安全的升级版 SSL。由于 SSL 这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL。但当您从赛门铁克购买 SSL 时,您真正购买的是最新的 TLS 证书,有 ECC、RSA 或 DSA 三种加密方式可以选择。

    TLS/SSL是一种加密通道的规范

    它利用对称加密、公私钥不对称加密及其密钥交换算法,CA系统进行加密且可信任的信息传输

    在HTTP SSL中常用的对称加密算法有RC4,AES,3DES,Camellia等

    SSL由从前的网景公司开发
    有1,2,3三个版本,但现在只使用版本3

    TLS是SSL的标准化后的产物
    有1.0 1.1 1.2三个版本
    默认使用1.0

    TLS1.0和SSL3.0几乎没有区别

    事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼
    平常还是以SSL为多。

    1. SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

    2. SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

    3. 安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

    4. TLS 的最大优势就在于:TLS 是独立于应用协议。高层协议可以透明地分布在 TLS 协议上面。然而,TLS 标准并没有规定应用程序如何在 TLS 上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。

     1、SSL加密
      SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是HTTP over SSL,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。 然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别
      2、TLS加密
      TLS:安全传输层协议
      TLS:Transport Layer Security
      安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

     

    SSL与TLS的区别以及介绍

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

    TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

      SSL是Netscape开发的专门用于保护Web通讯的,目前版本为3.0.最新版本的TLS 1.0是IETE(工程任务组)指定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。

      SSL(Secure Socket Layer)

      为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。

      当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

      SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

      SSL协议提供的服务主要有:

      1)认证用户和服务器,确保数据发送到正确的客户机和服务器;

      2)加密数据以防止数据中途被窃取;

      3)维护数据的完整性,确保数据在传输过程中不被改变。

      SSL协议的工作流程:

      服务器认证阶段:

      1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

      2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

      3)客服根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

      4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

      用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

      TLS(Transport Layer Security Protocol):安全传输层协议

      安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两成组成:TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)。较低的层为TLS记录协议,位于某个可靠的传输协议(例如TCP)上面。

      TLS记录协议提供的连接安全性具有两个基本特性:

    • 私有——对称加密用以数据加密(DES、RC4等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。
    • 可靠——信息传输包括使用密钥的MAC进行信息完整性检查。安全哈希功能(SHA、MD5等)用于MAC计算。记录协议在没有MAC的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。

      TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间互相认证,协商加密算法和加密密钥。TLS握手协议提供的连接安全具有三个基本属性:

    • 可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。
    • 共享解密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。
    • 协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。

      TLS的最大优势就在于:TLS是独立于应用协议。高层协议可以透明地分布在TLS协议上面。然而,TLS标准并没有规定应用程序如何在TLS上增加安全性;它如何启动TLS握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。

      协议结构

      TLS协议包括两个协议组——TLS记录协议和TLS握手协议。

      TLS和SSL的关系:并列关系

      最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL 3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL 3.0不能互操作。

      1.TLS与SSL的差异

      1)版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。

      2)报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的异或运算。但是两者的安全程度是相同的。

      3)伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。

      4)报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。

      5)密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。

      6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。

      7)加密计算:TLS和SSLv3.0在计算主密值(master secret)时采用的方式不同。

      8)填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度哟啊达到密文快长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。

     

      2.TLS的主要增强内容

      TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS在SSL v3.0的基础上,提供了以下增加内容:

      1)更安全的MAC算法

      2)更严密的警报

      3)“灰色区域”规范的更明确的定义

     

      3.TLS对于安全性的改进

      1)对于消息认证使用密钥散列法:TLS使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用(消息认证代码)MAC功能更安全。

      2)增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。

      3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。

      4)一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。

      5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。

     

    [更多详细地介绍]

    1、聊聊HTTPS和SSL/TLS协议 | 程序师 - 程序员、编程语言、软件开发、编程技术 http://www.techug.com/post/https-ssl-tls.html

    2、详解SSL/TLS http://www.mamicode.com/info-detail-1846390.html (推荐阅读)

    展开全文
  • TLS 1.3 协议详解

    万次阅读 热门讨论 2020-06-26 12:46:27
    TLS 1.3 握手流程详解 需要的背景知识: (1):对 TLS 1.2 协议有一定程度的了解,包括秘钥交换、会话复用等。 第一节 TLS 1.3 的握手概述 协议分析的第一步就是看报文。TLS 1.3的报文,有个特点,就是通过抓...

    TLS 1.3 握手流程详解

    我的TLS实现(支持TLS1.3和国密SSL),大家可以学习参考:https://github.com/mrpre/atls/

    需要的背景知识:
    (1):对 TLS 1.2 协议有一定程度的了解,包括秘钥交换、会话复用等。

    第一节 TLS 1.3 的握手概述

    协议分析的第一步就是看报文。TLS 1.3的报文,有个特点,就是通过抓包发现,只能看到明文的Client HelloServer Hello,其余的握手报文均被加密。

    1-RTT

    如图:

    图1
    这里写图片描述

    条件:无条件(如果client发送的keyshare类型是server不支持,那就不是1-RTT了,此处忽略)
    换句话说,TLS 1.3 正常情况下,第一次握手就是1-RTT的。(而TLS 1.3之前的协议只有第二次及其之后的握手且session resume成功后,才有1-RTT)。其次1-RTT又分为两种情况,一种是完整的握手(新的握手,就是上面图1所示),还有一种是不发送early data的PSK握手(可以理解为session 复用),如下图:

    图2
    这里写图片描述
    可见,图2 相对 图1,server少发送了诸多报文(熟悉TLS协议的肯定能猜到,至少是少发了server的证书,好几k的数据)。话句话说,TLS 1.3,PSK handshake和FULL handshake都是1-RTT,而所谓的0-RTT是建立在PSK handshake基础上的,下面就说说0-RTT。

    0-RTT

    如图3:
    图3
    这里写图片描述
    上面第一行,Application Data就是应用数据了,换句话说0-rtt就是在client-hello时就把应用数据捎带发给server(当然,server会根据自己的设置选择相信这个数据,也可以拒绝这个数据)
    条件:
    (1)之前已经有一次握手,并且server发送了session ticket。且session ticket中存在max_early_data_size拓展表示愿意接受early data。很好理解,0-rtt是基于session 复用的,所以肯定之前已经完成一次握手,且那次握手携带了session ticket以方便下一次握手时完成复用。

    (2)第二次握手时,client 发送了psk(其实就是session ticket外加一些检验的东西),server处理session ticket 会话复用成功,即server从client发送的psk中提恢复出了session。

    (3)第二次握手时,client 配置了发送 early data,表象就是如上图,Client Hello后面紧跟ccsccs后面紧跟application data(ccs不是必须的),且Client Hello 中的拓展中early data拓展表示会发送early data

    (3)第二次握手时,server配置了允许读取early data,且client行为如(2)。表象就是server的Encrypted Extensions中携带了early data拓展表示自己会读取early data。 如果 server没有配置读取early data的选项,那么server就会忽略client发送的Application data。client 需要在应用层主动ssl_write应用数据(通常库函数肯定会告诉你early data有没有被处理)。

    综上所述,0-RTT的要求还是蛮严格的,首先第一次握手时,server表示愿意读取early data,其次第二次握手时,会话复用成功,接着客户端表示会发early data且server表示自己会读取early data

    第二节 TLS 1.3 1-RTT 流程

    第一节中,我们已经看到了TLS 1.3的报文,可惜的是,握手报文是被加密的,看不出什么东西,不知道发了什么东西。本节将描述TLS 1.3下的诸多改进,以及详细的TLS 1.3 的报文。

    1-RTT 概述

    (1)TLS 1.3 相较于之前的版本,多了许多握手类型报文,比如Encrypted Extensions End of early data等。
    (2)除了Client HelloServer Hello其余报文全部都被加密,这就导致了你无法从wireshark的抓包结果中学习。
    (3)server 发送 certificate verify。之前协议中,只有客户端认证时,client才会发送certificate verify

    上述这些都是比较明显的区别,不明显的区别后文会一一阐述。

    接下来先回顾老的协议,再说新的协议。

    TLS 1.3之前的握手流程

    首先回忆一下,TLS 1.3 之前是如何秘钥交换的。

    这里简单的描述下 TLS 1.3 之前协议的秘钥交换流程,以及其缺点

    RSA 秘钥交换
    1:client 发起请求(Client Hello
    2:server 回复 certificate
    3:client使用证书中的公钥,加密预主秘钥,发给 server(Client Key Exchange
    4:server 提取出 预主秘钥,计算主秘钥,然后发送对称秘钥加密的finished
    5:client 计算主秘钥,验证 finished,验证成功后,就可以发送Application Data了。

    缺点:RSA秘钥交换不是前向安全算法(证书对应私钥泄漏后,之前抓包的报文都能被解密)。

    所以在 TLS 1.3中 RSA 已经废弃了。

    ECDHE秘钥交换
    1:client 发送请求(Client Hello),extension携带支持的椭圆曲线类型。
    2:server 回复 Server Hellocertificate等;server选择的椭圆曲线参数,然后 生成私钥(BIGNUM),乘以椭圆曲线的base point得到公钥(POINT),顺便签个名表示自己拥有证书,然后将报文发给client,报文就是Server Key Exchange,其包含了server选择的椭圆曲线参数、自己根据这个参数计算的公钥、自己用证书的私钥对当前报文的签名。
    3:client 收到 Server Key Exchange,获得椭圆曲线参数,生成私钥(BIGNUM)后计算公钥(POINT),然后把公钥发出去Client Key Exchange。client使用自己的私钥(BIGNUM)和server的公钥(POINT)计算出主秘钥。
    4:server 收到 client的公钥(POINT),使用自己的私钥(BIGNUM),计算主秘钥。两端主秘钥是一致。

    缺点:
    client发送自己支持的椭圆曲线类型,然后等待server选择后,才计算自己的公钥然后发送给server。这个可以优化。

    TLS 1.3 中是这样优化握手的:
    1:client 发送请求(Client Hello),extension携带支持的椭圆曲线类型。且对每个自己支持的椭圆曲线类型计算公钥(POINT)。公钥放在extension中的keyshare中。
    2:server 回复 Server Hellocertificate等;server选择的椭圆曲线参数,然后乘以椭圆曲线的base point得到公钥(POINT)。然后提取Client Hello中的key_share拓展中对应的公钥,计算主秘钥。公钥(POINT)不再和之前的以协议一样放在Server Key Exchange中,而是放在Server Hellokey_share拓展中。client收到server的公钥(POINT)后计算主秘钥。

    所以在TLS 1.3 中最显著的变化,也即上文说的无条件的1-RTT就是基于对握手协商的优化生。

    所以,Client 相当于计算了多种可能情况下server会使用的ecdhe参数,然后根据这些参数计算公钥提前发给server = =(为了追求rtt,也是绝了),你让那种嵌入式的客户端怎么办。

    完整的 TLS 1.3 1-RTT描述

    由于TLS 1.3几乎所有的报文都被加密,不好分析这里使用了写手段,将其解密开来,好可以在wireshark中进行直观的分析(修改方法:找一套开源代码,将其加解密流程bypass,然后用这套代码,起一个server和client,例如在OpenSSL中,我将加解密用的ctx全部强制置为NULL,保证了加解密都bypass)。
    顺便提一句,一张证书链怎么也得2、3k,这比通常的应用数据都长,原先传输证书是没有加密的,而TLS 1.3是加密的 = = 真把服务器当牛来用
    其流程如下图(解密后的):

    这里写图片描述

    Full handshake

    1:client发送Client Hello,携带如下几个重要信息
    (1):支持的加密套件(该作用和之前一样)。
    (2):supproted_versions 拓展。包含自己支持的TLS协议版本号。(之前协议没有)
    (3):supproted_groups 拓展,表示自己支持的椭圆曲线类型。
    (4):key_share拓展。包含supprot_groups中各椭圆曲线对应的public key。(当然可以发送空的,然后server会回复hello request,其中会包含server的key_share,可以用来探测,这里不讨论)。key_share中的椭圆曲线类型必须出现在supproted_groups中。(之前协议没有)

    2:server 发送Server Hello,携带如下几个重要信息
    (1):supproted_versions 拓展。包含自己从client的supproted_versions中选择的TLS协议版本号。(之前协议没有)
    (2):key_share拓展。包含自己选中的椭圆曲线,以及自己计算出来的公钥。(之前协议没有)

    3:server 发送Change Cipher Spec。(允许不发送)

    4:server发送Encrypted Extension。(加密的)
    (1:):ServerHello之后必须立刻发送Encrypted Extension。这是第一个被加密的数据数据。显然,放在这里的拓展,是和秘钥协商没关系的拓展。(之前协议没有)

    5:server发送Certificate。(加密的)
    这个报文和之前的协议没有太大区别,唯一的区别就是,在证书链中的每个证书后面,都有一个extension。(双向认证时也会有区别,有机会再说)。这个extension目前只能是OCSP Status extensionSignedCertificateTimestamps

    6:server发送Certificate Verify(加密的)
    这个报文并不陌生,但是以前只出现在双向认证(客户端认证)中,以前Certificate Verify生成的逻辑是将当前所有的握手报文解析解析签名(简单的md+非对称加密)。而在TLS 1.3中,这个计算有些变化,但是还是很简单。计算逻辑如下:

        u8 *p = tbs[BUFFER_SIZE];
    
        memset(p, 0x20, 64);
        p += 64;
        memcpy(p, "TLS 1.3, server CertificateVerify", 33);
        p += 33;
        *p ++ = 0;
        HASH(ALL_HANDSHKE, ALL_SIZE, P);
        p += md_size;
    
        SIGN(tbs)
    

    而TLS 1.2的计算是这样的:

        SIGN(HASH(ALL_HANDSHKE, ALL_SIZE));
    

    7:server回复Finished(加密的)
    这个报文的目的和之前协议一样,检验握手报文的完整性。但是计算方法有变化。
    TLS 1.3 的计算方法,先计算md,然后计算hamc,其中finishkey详细如何生成见key_derive。

        buffer = HMAC(HASH(ALL_HANDSHKE, finishkey)
        buffer 前添加握手报文类型+长度
        加密_send(buffer)
    

    TLS 1.2是这样计算的

        buffer = prf("server finished" + HASH(ALL_HANDSHKE))
        buffer 前添加握手报文类型+长度
        加密_send(buffer)
    

    8:client发送Change Cipher Spec。(允许不发送)

    9:client发送 Finished(加密的)
    同7。

    10:server发送New Session Ticket(可选,0-RTT 依赖次报文)
    若server表明自己有能力读取0-RTT,则会在New Session Ticket后面添加一个max_early_data_size拓展。

    整个流程的目的和TLS 1.2是相似的,就是为了交换椭圆曲线参数。和之前不一样的就是,无非就是提前把所有的公钥计算了一遍,发给server,server再挑选。

    PSK handshake

    我还是习惯于叫会话复用。其流程如下图(解密后的)

    这里写图片描述
    1:client发送Client Hello,除了Full handshake中提到的携带的拓展以外还包含如下字段:
    (1):psk_key_exchange_modes,目前只有psk_dhe_ke才能跑的通。
    (2):pre_shared_key拓展,其实就是New Session Ticket+binders,由于TLS 1.3 中,Server的New Session Ticket可以在握手结束后随时随地的发送,且可能发送多次,这意味着client会缓存多个New Session Ticket,所以pre_shared_key会保存多对New Session Ticket+binders组合。详细pre_shared_key后文会将,为了方便理解PSK handshake和0-RTT握手,此处的pre_shared_key完全理解为 TLS 1.2中的Client Hello中携带的Session_Ticket_TLS拓展。

    2:server发送Server Hello,除了Full handshake中提到的携带的拓展以外还包含如下字段:
    (1):pre_shared_key。表示自己正常解析了client发送的pre_shared_key,然后指定字节从client中选择的New Session Ticket+binders组合,用数字0,1,2,3…表示选择了第几个。

    3:server发送Change Cipher Spec(允许不发送)

    4:server发送Encrypted Extension
    Full handshake中一样

    5:client发送Change Cipher Spec(允许不发送)

    6:client发送 Finished(加密的)
    Full handshake中一样

    7:server发送New Session Ticket(可选)
    Full handshake中一样

    可见,他和TLS 1.2的session ticket复用没什么区别,无非就是处理session ticket的方式有些改变而已。

    TLS 1.3 0-RTT 流程

    上面讲了1-RTT的情况,TLS 1.3 默认最多1-RTT(不考虑Hello request),所以从这个角度上来说,TLS 1.3已经相较于 TLS 1.2 有了握手速度的提升,但是最终极的做法是0-RTT。0-RTT必然存在重放攻击,但是在Google的威逼利诱下,TLS 1.3 还是同意支持了0-RTT。后面会说0-RTT下重放攻击。

    文章开头TLS 1.3 的握手概述一节中,对0-RTT已经有了一些描述,但是不详细,这里根据报文详细描述下其流程。

    RFC中的描述

                ClientHello
                + early_data
                + key_share*
                + psk_key_exchange_modes
                + pre_shared_key
                (Application Data*)     -------->
                                                                ServerHello
                                                           + pre_shared_key
                                                               + key_share*
                                                      {EncryptedExtensions}
                                                              + early_data*
                                                                 {Finished}
                                        <--------       [Application Data*]
                (EndOfEarlyData)
                {Finished}              -------->
                [Application Data]      <------->        [Application Data]
    

    完整的TLS 1.3 0-RTT 描述

    0-RTT是基于上文中PSK handshake为基础的,所以这里和PSK handshake一样的地方直接一笔带过。

    1:client发送Client Hello,除了PSK handshake中提到的携带的拓展以外还包含如下字段:
    (1):early_data拓展,表示其在Client Hello后面紧跟着early data

    2:client发送Change Cipher Spec。(可以选,允许不发送)

    3:client发送application data
    这个application data是被加密的应用层数据,例如GET /...,可以发送好几个Application Data

    4:server发送Server Hello
    PSK Handshake

    5:server发送Change Cipher Spec(允许不发送)

    6:server发送Encrypted Extension。除了PSK Handshake中提到的携带的拓展以外还包含如下字段:
    (1):early_data拓展,表示其愿意接受Client Hello发送的early data

    7:server发送Finished

    8:client发送完early data后,发送End_Of_Early_Data报文表示client自己发送完了early data
    注意,early data并不算在最后的Finished中,其次,End_Of_Early_Data不参与最后application traffic secret的计算。

    9:client发送完End_Of_Early_Data后,发送Finished

    10:server发送New Session Ticket(可选)。

    11:server处理early data,这一步可能是server边收边处理的,所以放在3与4中间也行。

    0-RTT 处理顺序

    作为client,client发送early data之后,可以一直发early data
    作为server,接受Client Hello后,立刻发送自己的数据Server HelloChange Cipher SpecFinished
    作为client,当收到server的Finished后,才允许发送End_Of_Early_Data
    作为client,在如果server没有接受自己发送的early data,则不发送End_Of_Early_Data

    0-RTT 降级到 1-RTT

    上文TLS 1.3 的握手概述中描述过,完成0-RTT的条件有如下2个
    1:PSK Handshake成功
    2:Server配置了接受0-RTT
    那么自然,1和2都有可能发生错误(无论主观还是客观),肯定会由0-RTT降级到1-RTT的情况。降级必然需要妥善处理early data

    对于server来说,拒绝early data,有2种程度的方式可以拒绝:
    (1):拒绝PSK Handshake,即Server Hello中,不加入pre_shared_key拓展。这个常见于session ticket过期等情况。不支持PSK Handshake,自然而然不支持early data
    (2):只拒绝early data,但允许PSK Handshake。即Server Hello中,加入pre_shared_key拓展,但是Encrypted Extension报文中不加入early_data拓展。这个常见于server不准备读取early_data的情况。

    无论(1)和(2),都会忽略client发送的early data,如何忽略?其实如果server不准备读取early data,其当前阶段的secret导出是handshake secret而不是early secret(即想解密的是握手报文而不是early data),所以当拿这个secret去解密early data必然会出现错误,话句话说,所谓的忽略,就是忽略解密错误

    TLS 1.3 中的 New Session Ticket

    TLS 1.2 中的New Session Ticket

          struct {
              uint32 ticket_lifetime_hint;
              opaque ticket<0..2^16-1>;
          } NewSessionTicket;
    

    很简单的格式,一个是ticket_lifetime_hint,告知客户端这个ticket的生命周期(老化时间),ticket就是主要包含了主秘钥等其他信息(客户端认证的话可能还包含客户端的证书)。

    只有在Client HelloServer Hello中都携带了session ticket拓展,server才能在Change Cipher Spec之前发送New Session Ticket

    TLS 1.3 中的New Session Ticket

          struct {
              uint32 ticket_lifetime;
              uint32 ticket_age_add;
              opaque ticket_nonce<0..255>;
              opaque ticket<1..2^16-1>;
              Extension extensions<0..2^16-2>;
          } NewSessionTicket;
    

    ticket_lifetime和TLS 1.2中的ticket_lifetime_hint含义一样,用以告知客户端ticket的老化时间;ticket_age_add作用讲PSK还会再说,这里我们需要知道的是,该值主要是用来混淆PSK中携带的session ticket老化时间。ticket_nonce目前都是是一个counter,,初始值是0,发送一次后,counter++。ticket和TLS 1.2 中的含义类似,只是这里是PSK,而不是master_secretExtension extensions目前只定义了一种拓展:max_early_data_size,该值的作用在上文多次提到过,就是表明server愿意接收多少early data,超过这个值,server会断开连接。
    这个PSK,需要着重说一下,RFC中其计算流程如下:

    HKDF-Expand-Label(resumption_master_secret,
                    "resumption", ticket_nonce, Hash.length) = PSK
    

    入参的核心是,resumption_master_secret,它是由Master Secret进行derive后获得的(详见key derive)。

    TLS 1.3 中的 pre_share_key

    先看一下RFC中对应的格式:

          struct {
              opaque identity<1..2^16-1>;
              uint32 obfuscated_ticket_age;
          } PskIdentity;
    
          opaque PskBinderEntry<32..255>;
    
          struct {
              PskIdentity identities<7..2^16-1>;
              PskBinderEntry binders<33..2^16-1>;
          } OfferedPsks;
    
          struct {
              select (Handshake.msg_type) {
                  case client_hello: OfferedPsks;
                  case server_hello: uint16 selected_identity;
              };
          } PreSharedKeyExtension;
    
    

    上面的意思是说,对于Client Hello而言,发送的是OfferedPsks,也是这节我们关注的。(Server Hello中携带的PSK拓展,上文已经提到过了,也描述了其作用)。我们要关注3个值。
    1:Obfuscated Ticket Age
    2:Identity
    3:PSK binders

    Obfuscated Ticket Age

    个人理解,首先在TLS 1.2中,client发送的Session_Ticket_TLS拓展,并不携带该ticket在客户端已存在的时间。server收到后,靠ticket里面的内容来判断收到的ticket是否过期(例如server发送的ticket里面增加时间相关信息,收到后校验、或者server会定时更新解密key,解密失败意味着ticket过期),而在TLS 1.3中,特地增加一个值,表示ticket的年龄(即在客户端存在的时间)。但是,Client Hello是明文传输的,这个年龄必然也是明文传输的,所以中间人能够看到(看到有什么坏处呢?我不是很清楚,反正就是这么说的)。为了不让中间人知道这个ticket的年龄,很容易想到的是,对这个值 加盐。这个盐就是server端发送的New Session Ticket中的ticket_age_add,因为New Session Ticket本身就是被加密的,所以这个ticket_age_add只有通信两端才知道。
    Obfuscated Ticket Age的计算方法,RFC中也提到了:

    The "obfuscated_ticket_age" field of each PskIdentity contains an obfuscated version of the ticket age formed by taking the age in milliseconds and adding the 
    "ticket_age_add" value that was included with the ticket (seeSection 4.6.1), modulo 
    2^32
    

    obfuscated_ticket_age = (uint32)(jiffies + ticket_age_add)

    其次,Clienthello携带这个时间信息还有一个好处就是,Server可以依据这个时间来快速拒绝0-RTT。Server解密客户端发送Session Ticket后,提取出ticket_age_add,根据公式获取到这个Session Ticket在客户端的age ,判断这个ticket时间是否在自己可接受的范围之内。

    Identity

    其内容就是NewSessionTicket中的ticket部分。server用来恢复session的。这里不赘述了。

    PSK binders

    先说一下,对于client,PSK binders是怎么计算的:
    1、首先计算一个binder_key

                     0
                     |
                     v
       PSK ->  HKDF-Extract = Early Secret
                     |
                     +-----> Derive-Secret(.,
                     |                     "ext binder" |
                     |                     "res binder",
                     |                     "")
                     |                     = binder_key
    

    (1)第一步就是获取PSK
    PSK哪里的?其实就是从New Session Ticket中的ticket恢复得到。

    (2)第二步就是PSK和0进行HKDF-Extract计算Early Secret
    (3)第三步就是计算binder_key

    2、计算Finished key

    The PskBinderEntry is computed in the same way as the Finished message (Section 4.4.4) but with the BaseKey being the binder_key.
    

    所以我们需要计算Finished key

    3、计算当前client hello的摘要md
    注意这个不包括PSK BindersPSK Binders length,否则就出现鸡生蛋蛋生鸡的问题了。

    4、将md进行hmac计算,hmac的key是Finished key

    结尾

    无语 搞这么复杂,为了减少 RTT,代价就是增加 client 和 server的性能消耗。

    展开全文
  • TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txt TLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txt TLS 1.2 RFC http://www.ietf.org/rfc/rfc5246.txt   TLS 1.3 见:...
  • SSL/TLS/DTLS对比

    千次阅读 2016-11-22 13:39:55
    本文转自:... SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(TransportLayer Security,TLS & Datagram Transport Layer Security,DTLS)是为网络通信提供安全及数据完整性的一种安全
  • TLS & DTLS区别与联系

    千次阅读 2015-01-09 14:33:15
    TLS:Transport Layer Security protocol(传输层安全协议)
  • 传输层安全协议抓包分析之SSL/TLS

    千次阅读 2017-01-18 12:38:14
    1. 协议介绍 SSL/TLS是保护计算机网络通讯安全的一类加密协议...SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。 SSL (Secure Socket
  • DTLS

    千次阅读 2016-10-21 16:43:21
    DTLS 编辑词条 添加义项名 ...TLS不能用来保证UDP上传输的数据的安全,因此Datagram TLS试图在现存的TLS协议架构上提出扩展,使之支持UDP,即成为TLS的一个支持数据报传输的版本。DTLS 1.0 基于 TLS 1.1,
  • 详解 HTTPS、TLS、SSL、HTTP区别和关系

    万次阅读 2018-10-03 16:02:34
    TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系。 二、HTTP和HTTPS协议的区别 1、HTTPS协议需要到证书颁发机构...
  • TLS 详解

    千次阅读 2019-03-20 09:40:53
    1. TLS 定义 SSL(Secure Sockets Layer) 安全套接层,是一种安全协议,经历了 SSL 1.0、2.0、3.0 版本后发展成了标准安全协议 - TLS(Transport Layer Security) 传输层安全性协议。TLS 有 1.0 (RFC 2246)...
  • TLS 与HTTPS

    万次阅读 2018-03-29 14:25:40
    1 概述TLS 是进行 HTTPS 连接的重要环节,通过了 TLS 层进行协商,后续的 HTTP 请求就可以使用协商好的对称密钥进行加密SSL 是 Netscape 开发...所以 TLS 1.0 可以认为是 SSL 3.1TLS(Transport Layer Security Prot...
  • 访问某个比较老旧的网站或者内部站点时,提示:无法安全地连接到此页面,这可能是因为该站点使用过期的或不安全的 TLS 安全设置。如果这种情况持续发生,请与网站的所有者联系。TLS 安全设置未设置为默认设置,这也...
  • SSL/TLS 双向认证(一) -- SSL/TLS 工作原理

    万次阅读 多人点赞 2020-10-26 21:49:54
    本文部分参考: https://www.wosign.com/faq/faq2016-0309-03.htm https://www.wosign.com/faq/faq2016-0309-04.htm ... 一: SSL/TLS介绍 什么是SSL,什么是TLS呢?官话说SSL是安全套...
  • TLS

    2013-03-21 14:03:37
    协议简介 ...该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。 协议结构 TLS 协议包括两
  • tls

    2017-06-24 16:55:33
    tls的原理在于用非对称加密方法,建立对称加密通道。 由非对称公钥加密对称钥匙防止钥匙泄露,由数字证书确定对端身份,由数字签名防止篡改。
  • TLSTLS反调试

    千次阅读 2015-07-06 15:53:52
    这里只讨论TLS静态存储,T不讨论TLS动态存储,毕竟跟反调试关系不大。  TLS设计的本意,是为了解决多线程程序中变量同步的问题,是Thread Local Storage的缩写,意为线程本地存储。线程本身有独立于其他线程的栈...
  • SSL和TLS-TLS 1.2

    千次阅读 2018-11-12 11:00:30
    SSL和TLS-TLS 1.2TLS ExtensionsServer Name IndicationMaximum Fragment Length NegotiationClient Certificate URLTrusted CA KeysTruncated HMACCertificate Status RequestUser MappingAuthorizationCertificate...
  • TLS协议中PRF和TLS1.3中的HKDF

    千次阅读 2019-02-20 14:15:03
    TLS 协议中 PRF 和 TLS 1.3 中的 HKDF TLS 1.0/1.1/1.2协议中,使用了PRF算法进行 key derive。 TLS 1.3中使用了标准的HKDF来进行key derive。 这里大概先回顾一下 &amp;amp;lt;= TLS 1.2 时密钥导出流程和...
  • mbedtls安装与入门

    万次阅读 2019-04-22 20:19:07
    本文讲介绍如何在Ubuntu/Debian/Raspbian主机上正确安装mbedtls
1 2 3 4 5 ... 20
收藏数 150,705
精华内容 60,282
关键字:

tls