89人参与 • 2024-08-06 • 网络协议
最近在准备春招,刚好看到https,网上搜了一圈没看到满意的,于是打算自己整理一下,以下内容来源于《计算机网络(第8版)(谢希仁)》加上了一些自己的拙见
目前的https是使用http+tls的,所以直接了解tls的认证过程即可
曾经广泛使用的运输层安全协议有两个
(1)安全套接字层 ssl (secure socket laver)。
(2)运输层安全 tls (transport layer security)。
ssl是tls的前身,tls在ssl基础上改进了很多,但是现在还经常能够看到把ssl/tls视为tls的同义词。而现在旧协议ssl被更新为新协议tls。
应用层使用协议tls最多的就是http,但并非仅限于http。因为协议tls是对tcp加密,因此任何在tcp之上运行的应用程序都可以使用协议tls。例如,用于imap邮件存取的鉴别和数据加密也可以使用tls。tls提供了一个简单的带有套接字的应用程序接口api,这和tcp的api是相似的。
协议 tls 具有双向鉴别的功能。但大多数情况下使用的是单向鉴别,即客户端(浏览器)需要鉴別服务器。也就是说,浏览器 a 要确信即将访问的网站服务器 b 是安全和可信的。这必领要有两个前提。首先,服务器 b 必须能够证明本身是安全和可信的。因此服务器b 需要有一个证书来证明自己。现在我们假定服务器 b 已经持有了有效的 ca(certificate authority) 证书。这正是运输层安全协议 tls 的基石。其次,浏览器 a 应具有一些手段来证明服务器 b 是安全和可信的。下面就来讨论这一点。
生产电脑操作系统的厂商为了方便用户,把当前获得公众信任的许多主流认证中心ca的根证书,都已内置在其操作系统中。这些根证书上都有认证中心 ca 的公钥pkca,而且根证书都用 ca 的私钥skca进行了自签名(防止伪造)。用户为了验证要访问的服务器是否安全和可信,只要打开电脑中的浏览器(操作系统自带的或用户自己装上的),就可查到操作系统收藏的某个根认证中心的根 ca 证书,并可以利用证书上的公钥pkca对b的证书进行验证。若服务器 b 的证书是证书链上的某个中间 ca 签发的,那么浏览器 a 也可用类似方法验证b的证书的真实性。
由于浏览器与服务器的通信方式就是以前讲过的 “客户-服务器方式”,因此下面就用客户代表浏览器。
如图 7-21 所示,在客户与服务器双方己经建立了tcp 连接后,就可开始执行协议 tls。根据 rfc 8446,这里主要有两个阶段,即握手阶段和会话阶段。在握手阶段,tls 使用其中的握手协议,而在会话阶段,tls 使用其中的记录协议。下面讨论协议tls 的要点。
我们先介绍协议tls 的握手阶段。握手阶段要验证服务器是安全可信的,同时生成在后面的会话阶段所需的共享密钥,以保证双方交换的数据的私密性和完整性。这里要提醒读者,在刚开始执行协议 tls时,通信双方的信道是不安全的。因此要弄清:(1)双方怎样通过不安全的信道得到会话时所需的共享密钥。这里没有采用密钥分发中心kdc来分配密钥,而是采用自己生成共享密钥的方法。(2) 用什么方法保证所传送数据的机密性与完整性。
(ps:以下加粗的数字代表上图的步骤数)
(1)协商加密算法 1客户 a 向服务器b发送自己选定的加密算法(包括密钥交换算法)。2服务器 b从中确认自己所支持的算法,同时把自己的 ca 数字证书发送给 a。这里要说明一下,从tls 1.0更新到 1.1和1.2版本时,每一次更新都增加了当时认为是更加安全可靠的加密算法。为了协议的向后兼容,对老版本中的不太安全的数十种算法也都保留下来了。这就造成协商过程非常耗时,需要花费2倍rtt 的时间(通常记为 2-rtt)。因此最新的 tls 1.3 版本把陈旧的很多种算法统统取消(例如 mds, sha-1,des, 3des 等),只留下几种最安全的算法。客户不是把自己所有的加密算法都告诉服务器,供服务器来挑选,而是猜测服务器可能愿意使用什么加密算法,把自己选定的加密算法直接发送给服务器,让服务器来确认。这就把 “协商”时间缩短为 1-rtt。
(2)服务器鉴别 3客户a用数字证书中ca 的公钥对数字证书进行验证鉴别。
以下两步涉及非对称加密
(3)生成主密钥 4 客户 a 按照双方确定的密钥交换算法生成主密钥 ms (master secret)。5客户a用b的公钥pkb对主密钥 ms加密,得出加密的主密钥pkb(ms),发送给服务器b。请注意,在有关tls 的文档中,密钥一词使用的是secret,而不是key。
(4)服务器b用自己的私钥把主密钥解密出来:skb(pka(ms))=ms。这样,客户a和服务器b都拥有了为后面的数据传输使用的共同的主密钥 ms。
以上步骤鉴别了服务器b的身份并且使得a和b获得了安全通信所使用的密钥(a和b所持有的通信密钥是一样的,只不过a使用非对称加密算法将密钥安全传输给了b,注意区分用来加密通信密钥的非对称密钥和通信密钥)
(5)为了使双方的通信更加安全,客户a和服务器b最好使用不同的密钥。于是主密钥被分割成4个不同的密钥,这就是图 7-21 中的7和8:生成会话密钥。在这以后,每一方都拥有这样4个密钥(请注意,这些都是对称密钥,即加密和解密用的是同一个密钥):
会话密钥不使用非对称密钥,因为对称密钥的运行速度快得多(相差了3个数量级)。
下面就可以利用生成的通信密钥进行通信了,具体细节不再阐述,可以参考《计算机网络 第八版》
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论