目录

  • 1 概论
    • 1.1 课程简介
    • 1.2 导入
    • 1.3 计算机安全概念
    • 1.4 OSI安全体系结构
    • 1.5 安全攻击
    • 1.6 安全服务
    • 1.7 安全机制
    • 1.8 网络安全模型
    • 1.9 讨论和作业
  • 2 对称加密和消息机密性
    • 2.1 对称加密原理
    • 2.2 对称分组加密算法
    • 2.3 随机数和伪随机数
    • 2.4 流密码和RC4
    • 2.5 分组密码工作模式
    • 2.6 讨论和作业
  • 3 公钥密码和消息认证
    • 3.1 消息认证方法
    • 3.2 安全散列函数
    • 3.3 消息认证码
    • 3.4 公钥密码原理
    • 3.5 公钥密码算法
    • 3.6 数字签名
    • 3.7 讨论和作业
  • 4 密钥分配和用户认证
    • 4.1 基于对称加密的密钥分配
    • 4.2 Kerberos
    • 4.3 基于非对称加密的密钥分配
    • 4.4 X.509证书
    • 4.5 公钥基础设施
    • 4.6 联合身份管理
    • 4.7 讨论和作业
  • 5 网络访问控制和云安全
    • 5.1 网络访问控制
    • 5.2 可扩展认证协议
    • 5.3 IEEE 802.1X基于端口的网络访问控制
    • 5.4 云计算
    • 5.5 云安全风险和对策
    • 5.6 云端数据保护
    • 5.7 云安全即服务
    • 5.8 讨论和作业
  • 6 传输层安全
    • 6.1 Web安全需求
    • 6.2 安全套接字层和传输层安全
    • 6.3 传输层安全
    • 6.4 HTTPS
    • 6.5 SSH
    • 6.6 讨论和作业
  • 7 无线网络安全
    • 7.1 无线安全
    • 7.2 移动设备安全
    • 7.3 IEEE 802.11无线局域网概述
    • 7.4 IEEE 802.11i无线局域网安全
    • 7.5 讨论和作业
  • 8 电子邮件安全
    • 8.1 引言
    • 8.2 PGP
    • 8.3 S/MIME
    • 8.4 DKIM
    • 8.5 讨论和作业
  • 9 IP安全
    • 9.1 IP安全概述
    • 9.2 IP安全策略
    • 9.3 IPSec通信协议
    • 9.4 安全关联组合
    • 9.5 因特网密钥交换
    • 9.6 密码套件
    • 9.7 讨论和作业
  • 10 恶意软件
    • 10.1 恶意软件类型
    • 10.2 传播-感染内容-病毒
    • 10.3 传播-漏洞利用-蠕虫
    • 10.4 传播-社会工程-垃圾邮件与特洛伊木马
    • 10.5 载荷-系统破坏
    • 10.6 载荷-攻击代理-僵尸病毒与机器人
    • 10.7 载荷-信息窃取-键盘监测器、网络钓鱼与间谍软件
    • 10.8 载荷-隐身-后门与隐匿程序
    • 10.9 防护措施
    • 10.10 分布式拒绝服务攻击
    • 10.11 讨论和作业
  • 11 入侵者
    • 11.1 入侵者
    • 11.2 入侵检测
    • 11.3 口令管理
    • 11.4 讨论和作业
  • 12 防火墙
    • 12.1 防火墙的必要性
    • 12.2 防火墙特征
    • 12.3 防火墙类型
    • 12.4 防火墙载体
    • 12.5 防火墙的位置和配置
    • 12.6 讨论和作业
  • 13 总结
    • 13.1 信息安全
    • 13.2 网络安全
    • 13.3 系统安全
    • 13.4 思维导图
安全套接字层和传输层安全




推荐阅读

网络协议检测程序 Wireshark

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。 在过去,网络封包分析软件是非常昂贵,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使用Wireshark来为新的通讯协定除错,普通使用者使用Wireshark来学习网络协定的相关知识当然,有的人也会“居心叵测”的用它来寻找一些敏感信息……

Wireshark不是入侵侦测软件(Intrusion DetectionSoftware,IDS)。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark撷取的封包能够帮助使用者对于网络行为有更清楚的了解。Wireshark不会对网络封包产生内容的修改,它只会反映出目前流通的封包资讯。 Wireshark本身也不会送出封包至网络上。

下载地址:https://www.wireshark.org/download.html

学习视频:https://huke88.com/route/wireshark.html?sem=baidu&kw=113680&renqun_youhua=1872178&bd_vid=11259354353857470605


SSL技术白皮书

摘要

概述

产生背景

技术优点

协议安全机制

数据传输的机密性

身份验证机制

消息完整性验证

利用非对称密钥算法保证密钥本身的安全

利用 PKI 保证公钥的真实性

协议工作过程

SSL 分层结构

SSL 握手过程

只验证服务器的 SSL 握手过程

验证服务器和客户端的SSL握手过程

恢复原有会话的 SSL 握手协议

典型组网应用

HTTPS

SSL VPN

摘要

SSL 利用数据加密,身份验证和消息完整性验证机制,为基于 TCP 等可靠连接的应用层协议提供安全性保证。本文介绍了 SSL 的产生背景、安全机制、工作过程及典型组网应用。




概述

产生背景

基于万维网的电子商务和网上等新兴应用,极大地方便了人们的日常生活,收到人们的青睐。由于这些应用都需要在网络上进行在线交易,他们对网络通信的安全性提出了更高的要求。


传统的万维网协议 HTTP 不具备安全机制 —— 采用明文的形式传输数据、不能验证通信双方的身份、无法防止传输的数据被篡改等,导致 HTTP 无法满足电子商务和网上银行等应用的安全性要求。


Netspace 公司提出的安全协议 SSL,利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证。 SSL 可以为 HTTP 提供安全连接,从而很大程度上改善了万维网的安全性问题。


技术优点

SSL 具有如下优点:


提供较高的安全性保证。SSL 利用数据加密、身份验证和消息完整性验证机制,保证网络上数据传输的安全性。

支持各种应用层协议。虽然SSL 设计的初衷是为了解决万维网安全性问题,但是由于SSL 位于应用层和传输层之间,它可以为任何基于 TCP 等可靠连接的应用层协议提供安全性保证。

部署简单。目前 SSL 已经成为网络中用来鉴别网站和网页浏览者身份,在浏览器使用者及 WEB 服务器之间进行加密通信的全球化标准。SSL 协议已被集成到大部分的浏览器中,如 IE、Netscape、Firefox 等。这就意味着几乎任意一台装有浏览器的计算机都支持 SSL 连接,不需要安装额外的客户端软件。

协议安全机制

SSL 协议实现的安全机制包括:


数据传输的机密性:利用对称密钥算法对传输的数据进行加密。

身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。

消息完整性验证:消息传输过程中使用 MAC 算法来检验消息的完整性。

数据传输的机密性

网络上传输的数据被非法用户窃取,SSL采用在通信双方之间建立加密通道的方法保证数据传输的机密性。


所谓加密 通道,是指发送发在发送数据前,使用加密算法和加密密钥对数据进行加密,然后将数据发送给对方;接收方收到数据后,利用解密算法和解密密钥从密文中获取明文。灭有解密密钥的第三方,无法将密文恢复为明文,从而保证数据传输的机密性。


加解密算法分为两类:


对称密钥算法:数据加密和解密时使用相同的密钥。

非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,一个是由用户秘密保存的私钥。利用公钥(或私钥)加密的数据只能用相应的私钥(或公钥)才能 解密。

与非对称密钥算法相比,对称密钥算法具有速度快的优点,通常用于大量信息进行加密(如对所有报文加密);而非对称密钥算法,一般用于数字签名和对较少的信息进行加密。


SSL 加密通道上的数据加解密使用对称密钥算法,目前主要支持的算法有 DES、3DES、AES等,这些算法都可以有效地防止交互数据被窃听。


对称密钥算法要求解密密钥和加密密钥完全一致。因此,利用对称密钥算法加密传输数据之前,需要在通信两端部署相同的密钥。对称密钥的部署方法请参见后面,“利用非对称密钥算法保证密钥本身的安全”。


身份验证机制

电子商务和网上银行等应用中必须保证要登录的 Web 服务器是真实的,以免重要的信息被非法的窃取。SSL 利用数据签名来验证通信对端的身份。


非对称密钥算法可以用来实现数字签名。由于通过私钥加密后的数据只能利用对应的公钥进行解密,因此根据解密是否成功,就可以判断发送者的身份,如同发送者对数据进行了 “签名”。


例如,Alice 使用自己的私钥对一段固定的信息加密后发给了 Bob,Bob 利用 Alice 的公钥解密,如果解密结果与固定信息相同,那么就能够确认信息的发送者为 Alice,这个过程就称为数字签名。


SSL 客户端必须验证 SSL 服务器的身份,SSL 服务器是否验证 SSL 客户端的身份,则由 SSL 服务器决定。 SSL 客户端和SSL 服务端的身份验证过程,请参见“SSL 握手过程”。


使用数字签名验证时,需要确保被验证者的公钥是真实的,否则,非法用户可能会冒充被验证者与验证者通信。如 图1 所示,Cindy 冒充 Bob,将自己的公钥发给 Alice,并利用自己的私钥计算出签名发送给 Alice,Alice 利用 “Bob” 的公钥(实际上为 Cindy的 公钥)成功验证签名,则 Alice 成功验证改签名,则 Alice 认为 Bob 的身份验证成功,而实际上 Alice 通信的是冒充 Bob 的 CIndy。SSL 利用 PKI 提供的机制保证公钥的真实性,详细介绍请参见 “利用 PKI 保证公钥的真实性”。


在这里插入图片描述


消息完整性验证

为了避免网络中传输的数据被非法篡改,SSL 利用基于 MD5 或 SHA 的 MAC 算法来保证消息的完整性。


MAC 算法是在密钥参与下是数据摘要算法,能将密钥和任意长度的数据转化为固定长度的数据。利用 MAC 算法验证消息完整性的过程如图 2 所示。发送者在密钥的参与下,利用 MAC 算法计算出消息的 MAC 值,并将其加在消息之后发送给接收者。接收者利用同样的密钥的 MAC 算法计算出消息的 MAC值,并与接收到的 MAC 值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改,接收者将丢弃该报文。


在这里插入图片描述


MAC 算法具有如下特征,使其能够用来验证消息的完整性:


消息的任何改变,都会引起输出的固定长度数据产生变化。通过比较 MAC 值,可以保证接收者能够发现消息的改变。

MAC算法需要密钥的参与,因此没有密钥的非法用户在改变消息的内容后,无法添加正确的 MAC 值,从而保证非法用户无法随意修改消息内容。

MAC 算法 要求通信双方具有相同的密钥,否则MAC 值验证将会失败。因此,利用 MAC 算法验证消息完整性之前,需要在通信两端部署相同的密钥。MAC 密钥的部署方法见“利用非对称密钥算法保证密钥本身的安全”。


利用非对称密钥算法保证密钥本身的安全

对称密钥算法 和 MAC 算法要求通信双方具有相同的 密钥,否则解密或 MAC 值验证将失败。因此,要建立加密通道或验证消息完整性,必须先在通信双发部署一致的密钥。


SSL 利用非对称密钥算法加密密钥的方法实现密钥交换,保证第三方无法获取该密钥。如图3 所示,SSL 客户端(Web 浏览器)利用 SSL 服务器(Web 服务器)的公钥加密密钥,将加密后的密钥发送给SSL 服务器,只有拥有对应私钥的 SSL 服务器才能从密文中获取原始的密钥。 SSL 通常采用 RSA算法加密传输密钥。



在这里插入图片描述

说明:


实际上,SSL 客户端发送给 SSL 服务器的密钥不能直接用来加密数据或计算 MAC 值,该密钥是用来计算对称密钥和 MAC 密钥的信息,称为 premaster secret。SSL 客户端和 SSL 服务器 利用 premaster secret 计算出相同主密钥(master secret),再利用 master secret 生成用于对称密钥算法、MAC 算法等的密钥。premaster secret 是计算对称密钥、MAC 算法密钥的关键。

用来实现密钥交换的算法称为密钥交换算法。非对称密钥算法 RSA 用于密钥交换时,也可以称之为密钥交换算法。

利用非对称密钥算法加密密钥之前,发送者需要获取接收者的公钥,并保证该公钥确实属于接收者,否则,密钥可能会被非法用户窃取。如图1所示,CIndy 冒充 Bob ,将自己的公钥发给 Alice ,Alice 利用 Cindy 的公钥加密发送给 Bob 的数据, Bob 由于没有对应的私钥无法解密该数据,而 Cindy 截取数据后,可以利用自己的私钥解密该数据。 SSL 利用 PKI 提供的机制保证公钥的真实性,详细介绍请参见 “利用 PKI 保证公钥的真实性”。


利用 PKI 保证公钥的真实性

PKI通过数字证书来发布用户的公钥,并提供了验证公钥真实性的机制。数字证书(简称证书)是一个包含用户的公钥机器身份信息的文件,证明了用户与公钥的关联。数字证书有权威机构——CA签发,并由CA 保证数证书的真实性。


SSL 客户端把密钥加密传递给 SSL 服务器之前,SSL 服务器要将从 CA 获取的证书发送给 SSL 客户端,SSL 客户端通过 PKI 判断该证书的真实性。如果该证书确实属于 SSL 服务器,则利用该证书中的公钥加密密钥,发送给SSL 服务器。


验证 SSL 服务器/ SSL 客户端的身份之前,SSL 服务器/ SSL 客户端 需要将从 CA 获取的证书发送给对端,对端通过 PKI 判断该证书的真实性。如果证书确实属于 SSL 服务器 / SSL 客户端,则对端利用该证书中的公钥验证 SSL 服务器 / SSL 客户端的身份。


协议工作过程

SSL 分层结构


在这里插入图片描述

如图4 所示,SSL 位于应用层和传输层之间,它可以为任何基于 TCP 等可靠连接的应用层协议提供安全性保证。SSL 协议本身分为两层:


上层为 上层为SSL握手协议(SSL handshake protocol)、SSL密码变化协议(SSL change cipher spec protocol)和SSL警告协议(SSL alert protocol);

底层为SSL记录协议(SSL record protocol)。

其中:


SSL 握手协议:是SSL协议非常重要的组成部分,用来协商通信过程中使用的加密套件 (加密算法、密钥交换算法和 MAC 算法等)、在服务器和客户端之间安全地交换密钥、实现服务器和客户端的身份验证。

SSL 密码变化协议:客户端和服务器端通过密码变化协议通知对端,随后的报文都将使用新协商的加密套件和密钥进行保护和传输。

SSL 警告协议:用来向通信对端报告警告信息,消息中包含警告的严重级别和描述。

SSL 记录协议:主要负责对上层的数据(SSL握手协议、SSL 密码变化协议、SSL警告协议和应用层协议报文)进行分块、计算并添加 MAC 值、 加密,并把处理后的记录块传输给对端。

SSL 握手过程

SSL 通过握手过程在客户端和服务器之间协商会话参数,并建立会话。会话包含的主要参数有会话ID、对方的证书、加密套件(密钥交换算法、数据加密算法和MAC算法等)以及主密钥(master secret)。通过 SSL 会话传输的数据,都将采用该会话的主密钥和加密套件进行加密、计算 MAC 等处理。


不同情况下,SSL 握手过程存在差异。下面将分别描述一下三证情况下的握手过程:


只验证服务器的 SSL 握手过程

验证服务器和客户端的 SSL 握手过程

恢复原有会话 的 SSL 握手过程

只验证服务器的 SSL 握手过程

在这里插入图片描述


如图5 所示,只需要 验证 SSL 服务器身份,不需要验证 SSL 客户端身份时,SSL的握手过程为:


SSL 客户端通过 Client Hello 消息将它支持的 SSL 版本、加密算法、密钥交换算法、MAC 算法等信息发送给SSL 服务器。

SSL 服务器确定本次通信采用的 SSL 版本和 加密套件,并通过 Server Hello 消息通知给 SSL 客户端。如果 SSL 服务器允许SSL 客户端在以后的通信中重用本次会话,则SSL 服务器 会为本次会话分配会话 ID,并通过 Server Hello 消息发送给 SSL 客户端。

SSL 服务器将携带自己公钥信息的数字证书通过 Certificate 消息发送给 SSL 客户端。

SSL 服务器发送 Server Hello Done 消息,通知 SSL 客户端版本和加密套件协商结束,开始进行密钥交换。

SSL 客户端验证 SSL服务器的证书合法后,利用证书中的公钥加密 SSL 客户端随机生成的 premaster secret ,并通过 Client Key Exchange 消息发送给 SSL 服务器。

SSL 客户端发送 Change Cipher Spec 消息,通知 SSL 服务器后续报文将采用协商好的密钥和加密套件进行加密和 MAC 计算。

SSL 客户端计算已交互的握手消息(除 Change Cipher Spec消息外所有已交互的消息)的 Hash 值,利用协商好的密钥和加密套件处理 Hash 值(计算添加 MAC 值,加密等),并通过 Finished 消息发送给 SSL 服务器。SSL 服务器利用同样的方法计算已交互的握手消息的 Hash 值,并与 Finished 消息的解密结果比较,如果二者相同,且 MAC 值验证成功,则证明密钥和加密套件协商成功。

同样地,SSL 服务器发送 Change Cipher Spec 消息,通知 SSL 客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC 计算。

SSL 服务器计算已交互的握手消息的 Hash 值,利用协商好的密钥和加密套件处理 Hash 值(计算并添加 MAC 值、加密等),并通过 Finished 消息发送 给 SSL 客户端。SSL 客户端利用同样的方法计算已交互的握手消息的Hash 值,并与 Finished 消息的解密结果比较,如果二者相同,且 MAC 值验证成功,则证明密钥和加密套件协商成功。SSL 客户端接收到 SSL 服务器发送的 Finished 消息后,如果解密成功,则可以判断 SSL 服务器时数字证书的拥有者,即 SSL 服务器身份验证成功,因为只有拥有私钥的 SSL 服务器才能从 Client Key Exchange 消息中解密得到 premaster secret ,从而间接地实现了 SSL 客户端对 SSL 服务器的身份验证。

说明:


Change Cipher Spec 消息属于 SSL 密码变化协议,其他握手过程交互的消息均属于 SSL握手协议,统称为 SSL 握手消息。

计算 Hash 值,指的是利用 Hash 算法(MD5或SHA) 将任意长度的数据转换为 固定长度的数据。

验证服务器和客户端的SSL握手过程

在这里插入图片描述


SSL 客户端的身份验证是可选的,由SSL 服务器决定是否验证 SSL 客户端的身份。如图6 中蓝色部分表示的内容所示,如果 SSL 服务器验证 SSL 客户端 身份,则SSL 服务器和 SSL 客户端除了交互 “只验证服务器的SSL 握手过程”中的消息协商密钥和加密套件外,还需要进行以下操作:


SSL 服务器发送 Certificate Request 消息,请求 SSL客户端将其证书发送给 SSL 服务器。

SSL 客户端通过 Certificate 消息将携带自己的公钥的证书发送给SSL 服务器。SSL 服务器验证该证书的合法性。

SSL 客户端计算已交互的握手消息、主密钥的Hash 值,利用自己的私钥对其进行加密,并通过 Certificate Verify 消息发送给 SSL 服务器。

SSL 服务器计算已交互的握手消息、主密钥的Hash 值 ,利用 SSL 客户端证书中的公钥解密 Certificate Verify 消息,并将解密结果与计算出的 Hash 值比较。如果二者相同,则SSL 客户端身份验证成功。

恢复原有会话的 SSL 握手协议

在这里插入图片描述


协商会话参数、建立会话的过程中,需要使用非对称密钥算法来加密密钥、验证通信对端的身份,计算量较大,占用了大量的系统资源。为了简化 SSL 握手过程,SSL 允许重用已经协商过的会话,具体过程为:


SSL 客户端发送 Client Hello 消息,消息中的会话 ID 设置为计划重用的会话的ID。

SSL 服务器如果允许重用该会话,则通过在 Server Hello 消息中设置相同的会话ID 来应答。这样,SSL 客户端和SSL 服务器就可以利用原有会话的加密套件,不必重新协商。

SSL 客户端发送 Change Cipher Spec 消息,通知SSL 服务器后续报文将采用原有会话的密钥和加密套件进行加密和 MAC 计算。

SSL 客户端计算已交互的握手消息的 Hash 值,利用原有会话的 密钥和加密套件处理Hash 值,并通过 Finished 消息发送给 SSL 服务器,以便SSL 服务器判断密钥和加密套件是否正确。

同样地,SSL 服务器发送 Change Cipher Spec 消息,通知 SSL客户端 后续报文采用原有会话的密钥和加密套件进行加密和 MAC 计算。

SSL 服务器计算已交互的握手消息的 Hash 值,利用原有会话的密钥和加密套件处理 Hash 值,并通过 Finished 消息发送给 SSL 客户端,以便 SSL 客户端判断密钥和加密套件是否正确。

典型组网应用

HTTPS

HTTPS 是基于 SSL 安全连接的 HTTP 协议。HTTPS 通过 SSL 提供的数据加密、身份验证和消息完整性验证等安全机制,为 Web 访问提供了安全性保证,广泛应用于网上银行,电子商务等领域。


图8 中为 HTTPS 在网上银行中的应用。某银行为了方便客户,提供了网上银行业务,客户可以通过访问银行的 Web 服务器进行账户查询、转账等。通过在客户和银行的Web 服务器之间建立 SSL 连接,可以保证客户的信息不被非法窃取。


在这里插入图片描述

SSL VPN

SSL VPN 是以 SSL 为基础的VPN技术,利用SSL 提供 的安全机制,为用户远程访问公司内部网路提供了安全保证。如图9 所示,SSL VPN 通过在远程接入用户和 SSL VPN 网关之间建立 SSL 安全连接,允许用户通过各种 Web 浏览器,各种网络接入方式,在任何地方远程访问企业网络资源,并能够保证企业网络的安全,保护企业内部信息不被窃取。


在这里插入图片描述


————————————————

版权声明:本文为CSDN博主「人在囧途^o^」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44626569/article/details/92694316



SSL 握手协议详解


RSA作为身份认证,ECDHE来交换加密密钥,AES/DES等作为加密。


如果RSA来加解密,那么身份认证后,直接用认证后的RSA公钥解密。不需要再额外交换加密密钥了。



相关报文:




A. 安全能力交换


建立的安全属性包括:协议版本、会话ID、密文族、压缩方法,同时生成并交换用于防止重放攻击的随机数。密文族参数包括密钥交换方法(Deffie-Hellman密钥交换算法、基于RSA的密钥交换和另一种实现在Fortezza chip上的密钥交换)、加密算法(AES,3DES、RC4、RC2、3DES等)、MAC算法(MD5或SHA-1)、加密类型(流或分组)等内容。


重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(FreshnessAttacks),是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。说白了就是黑客C在通信线路上进行信号采集,比如A发往B的。然后,黑客C将监听到的信息,再次发往B,这时B以为是A发过来的,所以就会误认为是A在和其进行通信。如果这些通信过程中,涉及到了账户信息,隐私,交易,黑客就会得到得到这些内容。


防止重放攻击:随机数是为了防止重放攻击。要求通信双方必须事先协商一个初始序列号,并协商递增方法,一般随机数。通信双方通过消息中的序列号来判断消息的新鲜性。并且通过以下带时间戳的提问与应答的方式。



 


(1.)  客户机向服务器发送client_hello报文,带随机数。SSL 客户端通过 Client Hello 消息将它支持的 SSL 版本、加密算法、密钥交换算法、MAC算法等信息发送给 SSL服务器。


(2.)  服务器向客户机回应server_hello报文带随机数。SSL 服务器发送服务端支持的 SSL 版本和加密套件,并通过 Server Hello消息通知给 SSL 客户端。


client:我想和你说悄悄话,我会的密钥交换算法有(ECDH,RSA等),加密算法有(AES,3DES、RC4、RC2、3DES等),摘要算法/MAC有(SHA,MD5)等。


Server:好的啊。我会的是这些。


Client hello 的内容


Server hello


 


B. 身份认证过程


(3.)在hello报文之后,如果服务器需要被认证,服务器通过SendCertificate将发送其证书。


(4.)客户端需要检查以下内容来完成对服务器的认证来得到服务器域名和公钥等:


  时间是否在证书的合法期限内;


  签发证书的机关是否客户端信任的;


 签发证书的公钥是否符合签发者的数字签名;


 证书中的服务器域名是否符合服务器自己真正的域名。


(5.)服务器要求客户端发送客户端自己的证书,Certificate Request。客户端发送自己的证书。ResponseCertificate.


(6.)收到后,服务器验证客户的证书来得到客户端的域名和公钥等,如果没有通过则结束。如第4步


Server:这是我的身份证书(里面有我的名字和公钥),你检查下啊(certificate )。暂时不需要重新请求客户证书,不过我也要确认是是否你(一般不确认)。


Client:这是我的签名,证书等,你检查下。


 


B.  (加密算法确定)和密钥交换


如果加密算法采用RSA,那么不需要交换密钥了。如果是其他的,如AES,3DES等必须交换密钥。这个时候密钥交换一般是ECDHE等。以ECDHE为例子。


这个阶段是否还需要交换加密算法,我不确定。或许在第一阶段就确定了加密算法。假设加密算法是AES.


(7.)客户端生成一个随机数来生成PMS(Pre-master secret), 譬如ECDHE的A=a*G。并且用(8.) 服务端的RSA公钥加密传给服务端,服务端也生成一个随机数b,于是主密钥b*a*G。


(9.)服务端生成一个b来生成PMS(Pre-master secret) 譬如ECDHE的B=b*G。并且用客户端的RSA公钥加密传给客户端.


(10.)客户端收到B后,用自己的随机数a*B = a*b*G 得到主密钥。


 


Client:我们的暗号规则确定


Server:定为江湖规则1吧


Client:用这个(生成的随机数)去找到暗号的密码本吧


Server:生成随机数,发给客户端去找到暗号密码本


各自认证通过。


 


C.       握手结束,开始数据通信


Client:我给你发暗号了


Server:我给你会暗号了。

————————————————

版权声明:本文为CSDN博主「dellme99」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://blog.csdn.net/dellme99/article/details/43232059


SSL握手协议详解

概述

SSL(Secure Socket Layer)安全套接字协议是运行在应用层和TCP层之间的安全机制。保证上层应用数据传输的保密性、完整性以及传输双发身份的合法性。
1.传输加密性:握手协议定义会话密钥后,所有传输的报文被会话密钥加密。
2.消息的完整性:传输的报文中增加MAC(消息认证码),用于检测完整性。
3.身份验证:客户端认证(可选),服务端认证(强制)

SSL协议包括:握手协议(Handshake protocol)、SSLpassword变化协议(SSL change cipher spec protocol)、警报协议(Alert protocol)、记录协议(Record protocol)。

握手协议是SSL连接通信的第一个子协议也是最复杂的协议。
SSL握手协议详细流程SSL握手协议详细流程

SSL握手协议

通过握手过程,客户端与服务端之间协商会话参数(包括相互验证、协商加密和MAC算法、生成会话密钥等)。
SSL握手协议详细流程SSL握手协议详细流程

第一阶段:建立安全能力

客户端-client_hello:
1.客户端可以支持的SSL最高版本号;
2.客户端生成的32字节的随机数;
3.会话标识符ID;
4.客户端可以支持的密码套件列表;
5.客户端可以支持的压缩方法列表。

服务端-server_hello:
1.SSL版本号,取收到的客户端SSL版本和服务端支持的最高版本中的较低者;
2.服务端生成的32字节的随机数;
3.会话标识符ID;
4.从收到的客户端密码套件列表中选择一个密码套件(包含密钥交换算法、对称加密算法、摘要算法);
5.从收到的客户端压缩方法列表中选择一种压缩方法。

第二阶段:服务端验证和密钥交换

服务端-certificate:
含有公钥信息的服务端数字证书或到CA的完整证书链。

服务端-server_key_exchange:
可选,根据密钥协商算法而定,如果传送给客户端的服务端证书数据不足以按照第一阶段选定的密钥交换算法协商密钥,该步骤不足密钥协商元素。

服务端-certificate_request:
可选,请求验证客户端证书信息,单向数据认证(只认证服务端)无此步骤。

服务端-server_hello_done:
通知客户端版本号和加密套件协商结束。

第三阶段:客户端验证和密钥交换

客户端-certificate:
可选,客户端数字证书,双向数据认证中服务端要求验证客户端身份合法性。

客户端-client_key_exchange:
客户端交换密钥,视密钥交换算法而定,密钥协商参数或pre-master key(服务端公钥加密)。

客户端-certificate_verify:
可选,客户端将已交互的握手消息、会话密钥的摘要值用客户端私钥加密发送给服务端。

第四阶段:完成

客户端-change_cipher_spec:
改变密码格式信息,告诉服务端之后的报文消息用会话密钥加密。

客户端-finished:
向服务端宣布握手协议完成。

服务端-change_cipher_spec:
改变密码格式信息,告诉客户端之后的报文消息用会话密钥加密。

服务端-finished:
向客户端宣布握手协议完成。

原文来自:https://www.linuxprobe.com/ssl-tcp.html