多平台统一管理软件接口,如何实现多平台统一管理软件接口
471
2022-10-04
SSL协议原理(ssl协议工作原理图)
基础概念
网络模型与传输
通信内容使明文,内容可能被窃听不验证通信方身份,可能遭遇伪装无法验证报文的完整性,保温可能被篡改
加密-解决明文传输
加密算法
解决报文完整性问题——数字签名
数字签名是附加在数据上的一段特殊的加密过的校验码,使用数字签名有以下几个好处:数字签名可以证明数据的作者是谁。数字签名可以防止数据被篡改。下面看一下数字签名在网络数据传输中的一个应用流程:假设有节点 A 要向节点 B 发送一段报文:1、节点A为要发送的报文生成摘要,节点A用自己的私钥对摘要执行签名函数生成数字签名2、节点A把数字签名附在要发送的报文之后,然后把报文和签名一块发送给节点B3、节点B收到报文后,先取出数字签名部分,用公钥对签名执行反签名函数得到摘要4、节点B对报文部分生成摘要5、节点B对 3、4 两个步骤得到的两个摘要进行比较,如果一致,则可以认为报文是未被篡改过的
解决通信对方可能被伪装的问题——认证
有了数字签名,就可以验证数据的来源和完整性了,但是仅有数字签名还是有漏洞。无法确认请求发送到的服务器就是按真实意图响应的服务器,有可能是伪装的服务器;无法确认响应返回的客户端就是按真实意图接收响应的客户端,有可能是伪装的客户端;无法确定通信的对方是否具有访问权限;无法判断请求来自何方,出自谁手;即使是无意义的请求也会照单全收。
即使使用了数字签名进行加密数据传输,数据接收方必须有一个公钥,如果这个公钥被篡改为了攻击者的公钥,那攻击者就可以用自己的私钥发送篡改后的数据了。为了保证公钥的真实性,引入了认证这一手段。
认证——数字证书
数字证书是数字凭据,它提供有关实体标识的信息以及其他支持信息。数字证书是由称为证书颁发机构 (CA) 的权威机构颁发的。由于数字证书由证书权威机构颁发,因此由该权威机构担保证书信息的有效性。此外,数字证书只在特定的时间段内有效。
数字证书是用来证明网络实体身份以及传递其公钥的电子媒介。所以说数字证书主要有两个作用:第一个:证明其真实有效的身份,类似于电子的网络“身份证”第二个:向对方发布其公钥,以便后续进行加密的通信。
x.509是PKI中最重要的标准,它定义了公钥证书的基本结构。通常可使用openssl指令查看证书信息:
openssl x509 -in certname -text
X.509 标准规定数字证书应包含标准化信息。具体地说,X.509 版本3 证书包含下列字段:
版本号:指出该证书使用了哪种版本的X.509标准(版本1、版本2或是版本3),版本号会影响证书中的一些特定信息,目前的版本为3 序列号: 标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符 签名算法标识符: 用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密 认证机构的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过 认证机构: 证书颁发者的可识别名(DN),是签发该证书的实体唯一的CA的X.500名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书) 有效期限: 证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效 主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的 公钥信息: 包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数 颁发者唯一标识符:标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项
ssl协议
SSL协议(Secure Sockets Layer 安全套接层)是一套网络通信安全协议由Netscape在1994年创建设计的,具有数据加密、完整性校验及身份验证功能,用于保障网络数据传输的安全性。SSL协议位于应用层和传输层之间,可以为任何基于TCP等可靠连接的应用层协议提供安全性保证。
提供较高的安全性保证。SSL利用数据加密、身份验证和消息完整性验证机制,保证网络上数据传输的安全性。 支持各种应用层协议。SSL位于应用层和传输层之间,它可以为任何基于TCP 等可靠连接的应用层协议提供安全性保证。 部署简单。SSL协议已被集成到大部分的浏览器中,如IE、Firefox等。几乎任意一台装有浏览器的计算机都支持SSL连接,不需要安装额外的客户端软件。
协议安全机制
实际上,SSL 客户端发送给SSL 服务器的密钥不能直接用来加密数据或计算MAC值,该 密钥是用来计算对称密钥和MAC 密钥的信息,称为pre master secret。SSL客户端和SSL 服务器利用pre master secret 计算出相同的主密钥(master secret),再利用master secret 生成用于对称密钥算法、MAC 算法等的密钥。pre master secret 是计算对称密钥、MAC 算法密钥的关键。
SSL 分层结构
SSL协议本身分为两层:上层为SSL握手协议(SSL Handshake Protocol)、SSL密码变化协议(SSL change cipher spec protocol)和SSL警告协议(SSL alert protocol):它们建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
下层为SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为上层的数据(SSL握手协议、SSL密码变化协议、SSL警告协议和应用层协议报文)进行分块、计算并添加MAC值、加密,并把处理后的记录块传输给对端。
SSL握手过程
SSL通过握手过程在客户端和服务器之间协商会话参数,并建立会话。会话包含的主要参数有会话ID、对方的证书、加密套件(密钥交换算法、数据加密算法和MAC算法等)以及主密钥(master secret)。通过SSL会话传输的数据,都将采用该会话的主密钥生成的工作密钥和加密套件进行加密、计算MAC等处理。
工作密钥:并不是直接生成的,是客户端产生一个预主密钥(pre master secret ),然后用密钥交换算法交给服务器端,两端根据这个预主密钥计算出主密钥,再用主密钥生成工作密钥。
SSL握手过程的三种情况:
单向校验--只校验服务端证书
(5) SSL客户端验证SSL服务器的证书合法后,利用证书中的公钥加密SSL客户端随机生成的premaster secret,并通过Client Key Exchange 消息发送给SSL服务器。
(6) SSL客户端发送Change Cipher Spec 消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。SSL客户端计算已交互的握手消息(除Change Cipher Spec 消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash 值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
双向校验校验--服务端与客户端证书
SSL客户端的身份验证是可选的,由SSL服务器决定是否验证SSL客户端的身份。如果SSL服务器验证SSL客户端身份,则握手双方除了交互“只验证服务器的SSL握手过程”中的消息外,还需要
(2) SSL服务器发送Certificate Request 消息,请求SSL 客户端将其证书发送给SSL服务器
(3) SSL客户端通过Certificate 消息将携带自己公钥的证书发送给SSL服务器。SSL服务器验证该证书的合法性。
(4) SSL客户端计算已交互的握手消息、主密钥的Hash值,利用自己的私钥对其进行加密,并通过Certificate Verify消息发送给SSL服务器。
恢复原有会话的SSL握手过程
协商会话参数、建立会话的过程中,需要使用非对称密钥算法来加密密钥、验证通信对端的身份,计算量较大,占用了大量的系统资源。为了简化SSL握手过程,SSL允许重用已经协商过的会话,有两种方式:
session id会话复用 session ticket会话复用
session id会话复用具体过程为:
SSL客户端发送Client Hello消息,消息中的会话ID (1)设置为计划重用的会话的ID。(2) SSL服务器如果允许重用该会话,则通过在Server Hello消息中设置相同的会话ID来应答。这样,SSL客户端和SSL服务器就可以利用原有会话的密钥和加密套件,不必重新协商。(3) SSL 客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用原有会话的密钥和加密套件进行加密和MAC计算。
(4) SSL 客户端计算已交互的握手消息的Hash 值,利用原有会话的密钥和加密套件处理Hash值,并通过Finished消息发送给SSL服务器,以便SSL服务器判断密钥和加密套件是否正确。(5) 同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用原有会话的密钥和加密套件进行加密和MAC计算。(6) SSL服务器计算已交互的握手消息的Hash值,利用原有会话的密钥和加密套件处理Hash 值,并通过Finished消息发送给SSL客户端,以便SSL客户端判断密钥和加密套件是否正确。
Session id会话复用有2个缺点:服务器会大量堆积会话,特别是在实际使用时,会话老化时间配置为数小时,这种情况对服务器内存占用非常高。如果服务器是集群模式搭建,那么客户端和A各自保存的会话,在合B尝试会话复用时会失败。
Session ticket的工作流程如下:
(1)客户端发起client hello,拓展中带上空的session ticket TLS,表明自己支持session ticket。(2)服务器在握手过程中,如果支持session ticket,则发送New session ticket类型的握手报文,其中包含了能够恢复包括主密钥在内的会话信息,当然,最简单的就是只发送master key。为了让中间人不可见,这个session ticket部分会进行编码、加密等操作。(3)客户端收到这个session ticket,就把当前的master key和这个ticket组成一对键值保存起来。服务器无需保存任何会话信息,客户端也无需知道session ticket具体表示什么。(4)当客户端尝试会话复用时,会在client hello的拓展中加上session ticket,然后服务器收到session ticket后,进行解密、解码能相关操作,来恢复会话信息。如果能够恢复会话信息,那么就会提取会话信息的主密钥进行后续的操作,服务器将按照会话复用流程,直接回复server hello,ccs,finished。
SSL记录协议
在客户端和服务器端完成握手后,进入SSL记录协议,记录协议向SSL连接提供两个服务:
机密性(Confidentiality): SSL记录协议会协助双方产生一把共有的密钥,利用这把密钥来对SSL所传送的数据做传统式加密。 消息完整性(Message Integrity): SSL记录协议会协助双方产生另一把共有的密钥,利用这把密钥来计算出消息认证码 记录协议接收到应用程序所要传送的消息后,会将消息内的数据切成容易管理的小区块(分片),然后选择是否对这些区块作压缩,再加上此区块的消息认证码。接着将数据区块与MAC一起做加密处理,加上SSL记录头后通过TCP传送出去。接收数据方收到数据后,进行解释、检查、解压缩,及重组的步骤将消息的内容还原,传送给上层应用者。
1、分片2、是否压缩3、计算压缩数据的消息认证码4、压缩过后的数据会连同MAC一起做对称加密5、加上记录头
记录头包含以下的字段:(1)数据类型(Content type),8位:用来处理这个分片的上层协议。(2)主要版本号(Major Version),8位:协议的主要版本,v3协议来说,这个字段值为3。(3)次要版本号(Minor Version),8位:表示使用的次要版本,对于SSLv3协议来说,这个字段值为0。(4)压缩后数据长度(Compressed length),16位:这个明文分片的长度(假如此分片已经过压缩,则为压缩后的长度)。
SSL警告协议(SSL alert protocol
SSL报警协议报文(共2个字节)由严重级别和警告代码两部分组成。
严重级别(1字节)分为Fatal(值为2)和Warning(值为1)。其中,Fatal级报警即致命级报警,它要求通信双方都要采取紧急措施,并终止会话,如在数据传输过程中,若发现有错误的MAC,双方就需要立即中断会话,同时消除自己缓冲区相应的会话记录;而对Warning级报警即警告级报警的处理,通常是通信双方都只进行日志记录,它对通信过程不造成影响。
警告代码(1字节),举例如下: unexpected_message(10) : 接收了不合适的报文。 bad_record_mac(20) : 收到了不正确的MAC。 decryption_failed(21) : 解压缩函数收到不适当的输入。 certificate_revoked(44) : 证书已经被废弃。 bad_certificate(42) : 收到的证书是错误的。 certificate_expired(45) : 证书已经过期。 handshake_failure(40) : 握手过程失败。
SSL密码变化协议(change cipher spec)
SSL密码变化协议是3个高层的特定协议之一,也是其中最简单的一个。在客服端和服务器端完成握手协议之后,它需要向对方发送相关消息(该消息只包含一个值为1的单字节),通知对方随后的数据将用刚刚协商的密码规范算法和关联的密钥处理,并负责协调本方模块按照协商的算法和密钥工作。
SSL相关问题排查
使用tcpdump抓包
抓包指令:
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
解析:(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型(2)-i eth0 : 只抓经过接口eth1的包(3)-t : 不显示时间戳(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包(5)-c 100 : 只抓取100个数据包(6)dst port ! 22 : 不抓取目标端口是22的数据包(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
常见SSL 连接问题
SSL其他知识
单向SSL或者双向SSL
单向SSL or 双向SSL:这是由服务端配置决定的,如果服务端配置开启了“验证客户端”,那么就是双向SSL,否则就是单向SSL,客户端没有选择权。
什么是前向安全和后向安全:
前向安全(Perfect)Forward secrecy的大致意思是:用来产生会话密钥(session key)的长期密钥(long-term key)泄露出去,不会造成之前通讯时使用的会话密钥(session key)的泄露,也就不会暴漏以前的通讯内容。2014年时候,由于心脏出血漏洞(存在服务器私钥泄漏的可能),没有使用前向安全的站点,加密通信的数据可以通过私钥来解密,导致信息泄漏,这使得前向安全被重视起来。
后向安全(Backward secrecy),保证当前密钥的泄露不会对未来的密钥造成影响,即不必每次检测出密钥泄露就撤销、重建新的密钥系统。
分组密码加密中的四种模式
加密模式(英文名称及简写) 中文名称Electronic Code Book(ECB) 电子密码本模式Cipher Block Chaining(CBC) 密码分组链接模式Cipher Feedback Mode(CFB) 加密反馈模式Output Feedback Mode(OFB) 输出反馈模式
ECB:最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。CBC:明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。CFB:类似于自同步序列密码,分组加密后,按8位分组将密文和明文进行移位异或后得到输出同时反馈回移位寄存器,优点最小可以按字节进行加解密,也可以是n位的,CFB也是上下文相关的,CFB模式下,明文的一个错误会影响后面的密文(错误扩散)OFB:将分组密码作为同步序列密码运行,和CFB相似,不过OFB用的是前一个n位密文输出分组反馈回移位寄存器,OFB没有错误扩散问题。
根证书怎么配置
SSL客户端需要配置根证书,这个根证书是服务器证书的根证书,配置在客户端,在SSL握手过程中,用来验证服务器证书是否合法。同样的道理,在服务端配置的根证书就是客户端证书对应的根证书。证书颁发机构—CA又称为证书认证(Certificate Authority) 中心,是一个负责发放和管理数字证书的第三方权威机构,它负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份。CA机构的数字签名使得攻击者不能伪造和篡改证书。认证中心主要有以下5个功能:1、证书的颁发 2、证书的更新 3、证书的查询 4、证书的作废 5、证书的归档
什么时候发送“Server key exchange message”
对于使用DHE/ECDHE非对称密钥协商算法的SSL握手,将发送该类型握手。RSA算法不会继续该握手流程(DH、ECDH也不会发送server key exchange)。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~