网络安全技术-ssl协议
简介
- 安全套接层(SSL :Secure Sockets Layer Protocol ),是为网络通信提供安全及数据完整性的一种安全协议。
- Netscape 公司1994 年所研发
- 其继任者为传输层安全协议( TLS :Transport Layer Security )
所提供的服务
- 机密性:利用对称加密算法保证通信的机密性。
- 完整性:利用完整性保护机制确保数据没有被修改
- 身份认证:通过证书实现单向或者双向认证
- **交换:为对称加密算法协商**
特点
- 端到端可靠安全:使用TCP 协议来提供一个可靠的 端到端 安全服务。
- 可扩展性(Scalability ):新的密码算法可以容易的加入。
- 高效性(Efficiency ):通过压缩等方法减少通信开销。
- 透明性:对应用层透明。
SSL 与TCP/IP 协议栈的关系
ssl协议的传输过程
ssl中的通信实体
通信实体( (entity ):是指SSL 的参与者,在 在SSL v3 中定义了两个通信实体:
- 客户
• 客户是协议的发起者 - 服务器
• 服务器是协议的响应者
ssl几个重要概念
- SSL Session (SSL 会话):是ssl客户和ssl服务器之间的一个关联关系,定义了客户和服务器之间的一套加密规范参数(如加密算法、加***、吃实话向量等),可被多个ssl连接共享
- SSL Connection (SSL 连接):是一种通信实体具有对等关系的通信连接,它规定了对等关系的通信连接所需要的各种参数,且该连接时瞬时的,用后即消失。
注:上述两者的关系中,会话是用来协商安全参数的,连接是用来安全传输应用数据的。一个会话可能包含多个安全连接。
- SSL Session State (SSL 会话状态):会话状态中,所包含的信息为:会话标识、证书、压缩方法、加密规范、主秘密、标志
- SSL Connection State (SSL连接状态):所需要的所有信息为:两个32字连接的随机数,两个mac**、一个对称加***、两个初始向量,两个序号。
ssl连接是单向性的
因为连接是单向的,所以客户和服务器之间如果需要相互通信,则需要建立两个连接
ssl协议框架
-
握手协议
用来实现**交换和认证,,本质是一个**交换协议,但是也包含认证功能,所以可视为认证与**交换协议,主要实现:
- 客户和服务器之间相互认证
- 协商**交换算法
- 协商压缩算法
- **交换
- 初始向量协商
握手协议四个过程
- 交换安全能力:客户端和服务器之间通过发送要求建立会话的消息,交换彼此要求和能力,使得二者tls版本、会话表示、将要使用的**组(包括加密算法 压缩算法 **交换算法等)达成一致,从而为下一步安全参数提高了具体信息
-
服务器认证与**交换
服务器证书列表消息(Certificate )
• 通过服务器向客户发送自己的证书(和证书列表)来实现客户对服务器的身份认证(验证)。
服务器**交换消息(Server_Key_Exchange)
• 向客户端发送服务器自己的**信息。
客户端证书请求消息(Certificate_Request)
• 如果服务器需要对客户身份进行认证(验证),则向客户发送客户证书请求(Certificate request )消息,要求客户在下一阶段返回自己合适的证书。
• 对于匿名**交换,如果客户收到服务器发送的Certificate request 消息,则通过报警消息发送致命错误后关闭连接。
服务器结束消息(Server_Hello_Done)
• 向客户发送服务器结束消息(Server Hello Done ),通告客户可以执行**交换协议。
说明:服务器证书消息是服务器向客户端传送自己的证书,使得客户端知道服务器的公钥以及其他信息。
- 客户端认证与**交换
在接收到服务器完成消息之后
– 如果请求了证书,客户端需要验证服务器是否提供了合法的证书
– 检查server_hello 参数是否可以接受
– 如果所有条件满足,则客户端向服务器发回一个或者多个消息:
• (1 )客户端证书消息(Certificate) :如果服务器请求了证书,必须有该消息
• (2 )客户端**交换消息(Client_Key_Exchange) :必须发送
• (3 )客户端证书校验消息(Ceritificate_Verify) :可以发送(便于服务器验证自己(客户端)的证书)
上述名词解释
客户端证书消息(Certificate)
• 如果服务器请求了证书(即服务器发送了Certificate request 消息),且客户拥有合适的证书,客户端必须发送该消息来向服务器传递自己的证书。
• 如果客户没有合适的证书, 则通过向服务器发送一个零长度*的证书列表结构,表明无法证明自己的身份。
客户端**交换消息(Client Key Exchange)
• 客户必须发送该消息用于完成与服务器之间的**交换。
客户端证书校验消息(Ceritificate Verify)
• 通过发送客户端的证书校验消息,允许服务器验证客户证书的有效性
-
完成后:通知启用新的安全参数
此阶段完成安全连接的设置,主要包含以下消息:
– 客户:
• (1 )客户端发送的修改密码规范消息(Change_Cipher_Spec)
• (2 )客户端发送的完成消息(Finished)
– 服务器
• (1 )服务器发送的修改密码规范消息(Change_Cipher_Spec)
• (2 )服务器发送的完成消息(Finished)
名词解释
客户的加密规范修改消息(Change Cipher Spec)
• 修改密码协议来通过服务器启用新的安全参数,且记录层协议对以
后的所有数据均使用新的密码参数来加密。
客户的完成消息(Finished)
• 验证**交换和认证协议成功完成
服务器的修改密码规范消息(Change Cipher Spec)
• 通告客户启用新的安全参数。
服务器的完成消息(Finished)
•发送该消息后服务器将等待应用程序数据。
注:从此刻开始,客户端和服务器的记录层协议将启用新的**和算法进行数据加密
- 记录层协议:用来安全传输数据
- 加密规约修改协议:启用新的密码参数
- 报警协议:报警和错误告知 ,用于将ssl握手协议或者记录层协议等过程有关吧的告警传输给对方或向对方发出警告,或者终止当前连接。消息分类为:
-
警告消息:仅仅通知对方有关报警消息,不会导致连接被关闭。警告消息常在以下情况出现:结束通知 无证书 证书出错 不支持的证书 证书撤销 证书过期 未知证书
-
致命消息:将导致连接被立即终止,并将这个连接相关会话作废。常在以下情况出现:意外消息 、mac记录出错 、解压失败 、握手失败、 非法参数
ssl记录层协议
- 发送方功能
- 将用户数据封装为SSL 数据
- 发送到传输层
具体处理过程:
-
分片: 从上层接收任意大小的数据块( Records )
-
压缩: 用当前会话状态中给出的压缩算法明文结构SSLPlaintext 压缩为压缩记录SSLCompressed
-
MAC 计算: 用当前会话状态中指定的MAC 算法对SSLCompressed 计算消息摘要
-
加密: 用加密算法加密压缩数据和消息摘要,形成密文结构(SSLCiphertext )
-
封装发送: 将数据封装为可靠传输层协议的数据包,并发送到TCP 协议
-
接收方 功能
- 从传输层接收SSL 数据
- 解封装SSL 数据
- 将数据发送给应用层
具体工作过程
- 解封装:从 从TCP 接收到包含SSL 记录层协议头的数据,去
掉记录层协议头得到加密的数据 - 解密: 用解密算法解密数据,得到明文消息和消息摘要
- MAC 验证: 根据明文消息计算消息摘要并与解密得到的消
息摘要进行比较,验证完整性是否保证 - 解压: 用解压缩算法解压压缩数据
- 组装:将各块数据组装得到应用层数据块
ssl支持的密码算法
握手协议总结
会话重用
- 在 在SSL 中,为了节约密码参数协商带来的开销,允许一个连接中的密码参数被多个会话重用
- 会话重用不需要经过完整的握手协议,只需要通知双方利用过去会话标识重用过去协商的密码参数即可。
SSL 中的认证与**交换
在握手协议中,服务器证书请求和客户端证书请求都是可选的,因此SSL 的握手过程实际蕴含三种验证方式 :
- 客户端和服务器均被认证
- 只验证服务器
- 客户端和服务器均不被认证(即匿名模式)
服务器的证书CAs 包含服务器公钥Ks )或者由CA 签名的临时
RSA 公钥Ks
SSL 中的瞬时DH **交换与认证
SSL 中的固定DH **交换与认证
SSL 中的匿名DH **交换
ssl**生成算法
相关名词解释
次**(pre_master_secret) 通过客户和服务器交换得到
• 交换方法主要有两种:
RSA :由客户端生成48 字节的次**,并用服务器的
RSA 公钥加密后发送到服务器
Diffie-Hellman :客户端和服务器同时生成Diffie-
Hellman 公钥,**交换后双方执行Diffie-Hellman 计算,
创建共享次**
主**的生成算法
主**通过次**( pre_master_secret )和 随机数
ClientHello.random & ServerHello.random
**块
由主**和随机数、 、ClientHello.random 、 ServerHello.random 生成**块( Key Block )
**的最终生成 各**的最终生成
各**通过对 **块进行切割而得到
ssl**生成
ssl应用实例https算法
ssl与http
• HTTP 协议在传输过程中没有提供足够的安全保护
• 网景公司(Netscape )在1995 年首先提出了采用SSL 保护HTTP
的方案( HTTP over SSL )
– HTTP over TLS 具体在RFC 2817 和RFC 2818 中描述
– HTTPS (Secure Hypertext Transfer Protocol )安全超文本传输协议
HTTP Over SSL 执行过程
-
客户(浏览器)向WEB 服务器发起连接,执行SSL 握手协议。
– 浏览器既是WEB 服务器的客户端,也是**SSL **的客户端,因此首先通过向SSL 服务器发送ClientHello 消息 而发起SSL 握手协议。
– 协商所需要的所有安全参数。 -
通过SSL 加密规约修改 协议 通知双方使用新的安全参数启用SSL 协议。
– 在未启用SSL 之前,不会传送HTTP 数据。 -
在已建立的SSL 信道上,通过SSL 记录层协议来传输HTTP 数据。
– 一般是分配443 端口,端口可以通过配置来更改。
– 对于很大的web 页面,可通过多个SSL 记录层协议包来传送。 -
客户或服务器关闭SSL 连接
– 客户或服务器通过SSL 报警协议 发送close_notify 消息通知服务器关闭SSL 连接,并同时发送TP FIN 关闭TCP 连接。
– 如果没有收到 close_notify 而直接收到了TCP FIN (称之为提前关闭连接),则可能是系统错误或攻击行为。
– 客户端可以在任何时候关闭连接,因此服务器必须能够适应这种方式以恢复连接
消息格式
HTTP Over SSL 中客户对服务器的认证
- 浏览器接收到服务器的证书。
- 浏览器通过比较所访问的主机名与服务器返回的证书中的主机名
( (subjectName )是否一致来认证服务器。 - 证书的subjectAltName 扩展字段可以用来支持其他认证:
– 如果subjectAltName 的类型是dNSName ,则可以对域名进行认证
– 如果subjectAltName 的类型是iPAddress ,则可以对URI 中使用的IP 地址进行认证。 - 如果访问的主机与证书的主机不一致:
– 浏览器必须提示用户注意( 用户可以选择是否继续建立连接 )。
– 或通过发送证书错误来终止连接。 - 用户可以通过设置来自动处理这种证书 错误(比如终止连接、忽略等),并对错误进行记录和审计。
服务器对用户没有其他信息 - 服务器对用户的认证只能通过用户的证书
– 如果用户的证书是不可接受的,则认证失败
– 否则认证通过
http over ssl 证书常见错误类型
常见问题
-
当握手协议结束后,合适开始启用新的密码参数呢?
答:ssl需要从预备状态向当前状态改变 -
ssl连接中预备状态何时改变到新状态?
答:启用新的密码参数时,且状态改变由ssl中密码规约修改协议来通知双方启用 -
当ssl协议执行过程中出现错误怎么办?
答:使用报警协议来解决ssl协议执行过程中出现的各种问题 -
为什么需要服务器**交换和客户端**交换两个过程?
答:因为ssl同一个连接两个方向采用不同的**