文章目录
- 1. 前言
- 2. 基础概念
- 3. SSL协议结构
- 3.1 概述
- 3.2 SSL握手协议
- 3.3 修改密码说明协议
- 3.4 报警协议
- 3.5 SSL记录协议
- 4. SSL安全性
- 4.1 安全机制分析
- 4.2 脆弱性分析
- 5. SSL证书
1. 前言
参考《应用系统安全基础》
2. 基础概念
安全套接字层协议(Security Socket Layer,SSL)是基于web应用的安全协议,主要采用公开密钥体制和X.509数字证书技术,其目标是保证两个应用间通信的保密性、完整性和可靠性,可在服务器和客户端两端同时实现支持。
SSL的安全服务位于TCP和应用层之间,可为应用层(如HTTP、FTP、SMTP)提供安全业务,服务对象主要是Web应用,即客户浏览器和服务器。
基于SSL技术,TLS包含了许多安全增强功能并最终被大多数应用所采用,替换了SSL。早期版本的TLS在通信双方都不支持TLS时可以降级支持SSL V3.0,然而,在2011年TLS v1.2不再支持向后兼容性。
尽管TLS已经存在十多年,许多人仍将其误称为SSL,由于这个原因,TLS也获得了SSL 3.1的昵称。
3. SSL协议结构
3.1 概述
SSL是一个两层协议,包括SSL握手层协议和SSL记录层协议。SSL握手层有SSL握手协议、SSL更改密码说明协议、SSL报警协议;SSL记录层协议有SSL记录协议,它为更高层提供基于客户/服务器模式的安全传输服务
SSL协议提供的服务可以归纳为三个方面:
- 用户和服务器的合法性认证:使得用户和服务器能够确信数据将被发送到正确的客户机和服务器上。客户机和服务器都有各自的识别号,由公开密钥编排。为了验证用户,SSL协议要求在握手交换数据中做数字认证,以此来确保用户的合法性。
- 加密数据以隐藏被传送的数据:SSL协议采用的加密技术既有对称密钥,也有公开密钥。具体来说,就是客户机与服务器交换数据之前,先交换SSL初始握手信息。在SSL握手信息中采用了各种加密技术,以保证其机密性和数据的完整性,并且经数字证书鉴别。这样就可以防止非法用户破译。
- 维护数据的完整性:维护数据的完整性 SSL协议采用Hsh函数和机密共享的方法,提供完整信息性的服务,来建立客户机与服务器之间的安全通道,使所有经过SSL协议处理的业务在传输过程中都能完整、准确无误地到达日的地。
两个状态:连接状态、会话状态
会话状态要素:会话标识符;对方证书;压缩方法;密码规范;主密码;可重用否
连接状态要素:服务器和客户端的随机数;服务器写MAC密码;客户端写MAC密码;服务器写密钥;客户端写密钥;初始向量;序列号
通信步骤:建立TCP连接;SSL握手,建立SSL会话;通过会话传送加密数据包;释放连接,会话过期
3.2 SSL握手协议
SSL握手协议被封装在记录协议中,该协议允许服务器与客户机在应用程序传输和接受数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时服务器与客户机交换一系列信息。
SSL握手协议报文头包括三个字段:
- 类型(1字节):该字段指明使用的SSL握手协议报文类型。SSL握手协议报文包括10种类型。
- 长度(3字节):以字节为单位的报文长度。
- 内容(≥1字节):使用的报文的有关参数。
当一SSL客户和服务器首次开始通信时,就协议版本、加密算法的选择、是否验证对方及公钥加密技术的应用进行协商以产生共享的秘密,这一处理是由握手协议完成的
- 建立安全能力:客户机向服务器发送
client hello
报文,服务器向客户机回应server hello
报文,建立如下的安全属性:协议版本、会话D、密文族、压缩方法,同时生成并交换用于防止重放攻击的随机数。密文族参数包括密钥交换方法(Defe-Hellman密钥交换算法、基于RSA的密钥交换和另一种实现在Fortezza chip上的密钥交换)、加密算法(DES、RC4、 RC2、3DES等)、MAC算法(MD5或SHA-1)、加密类型(流或分组)等内容。 - 认证服务器和密钥交换:在hello报文之后,如果服务器需要被认证,服务器将发送其证书。如果需要,服务器还要发送
server key_exchange
。然后,服务器可以向客户发送certificate request
请求证书。服务器总是发送server hello done
报文,指示服务器的hello阶段结束。 - 认证客户和密钥交换:客户一旦收到服务器的
server hello done
报文,客户将检查服务器证书的合法性(如果服务器要求),如果服务器向客户请求了证书,客户必须发送客户证书,然后发送client key_exchange
报文,报文的内容依赖于client hello
与server_hello
定义的密钥交换的类型。最后,客户可能发送client verify
报文来校验客户发送的证书,这个报文只能在具有签名作用的客户证书之后发送。 - 结束:客户发送
change_cipher_spec
报文并将挂起的CipherSpec复制到当前的CipherSpec。.这个报文使用的是改变密码格式协议。然后,客户在新的算法、对称密钥和MAC秘密之下立即发送finished
报文。finished
报文验证密钥交换和鉴别过程是成功的。服务器对这两个报文响应,发送自己的change_cipher_spec
报文、finished
报文。握手结束,客户与服务器可以发送应用层数据了。
CipherSpec包括以下字段:加密算法,MAC算法,加密类型,可输出的,散列大小,密钥素材,IV大小
📖当客户从服务器端传送的证书中获得相关信息时,需要检查以下内容来完成对服务器的认证:时间是否在证书的合法期限内;签发证书的机关是否是客户端信任的;签发证书的公钥是否符合签发者的数字签名;证书中的服务器域名是否符合服务器自己真正的域名。服务器被验证成功后,客户继续进行握手过程。
📖同样的,服务器从客户传送的证书中获得相关信息认证客户的身份,需要检查:用户的公钥是否符合用户的数字签名;时间是否在证书的合法期限内;签发证书的机关是否是服务器信任的;用户的证书是否被列在服务器的LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)里用户的信息中;得到验证的用户是否仍然有权限访问请求服务器资源。
3.3 修改密码说明协议
表示密码策略的变化,在完成握手协议前客户端和服务器端都要发送这一消息,以便通知对方其后的记录将用刚刚协商的密码规范及相关的密钥来保护。所有的更改密码规范消息都将产生一个意外消息警告。
3.4 报警协议
当握手过程或数据加密等操作出错误或发生异常情况时,向对方发出警告或终止当前连接。
报警协议的组成:第一个字节的值为warning或fatal,第二个字节是具体的告警消息。
waring:对发送方和接收方之间的连接没有影响,例如:错误证书、无证书、整数过期、证书未知、关闭通知,证书不支持、证书已撤销
fatal:会中断发送方和接收方之间的连接,例如:握手失败、减压失败、非法参数、错误记录MAC、意外消息
3.5 SSL记录协议
SSL记录协议为SSL连接提供两种服务:机密性和报文完整性。
在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的SSL通信都使用SSL记录层,记录协议封装上层的握手协议、报警协议、更改密码说明协议和应用数据协议。SSL记录协议包括了记录头和记录数据格式的规定。
SSL记录协议位于SSL协议的底层,用于定义传输数据的格式,加密/解密、压缩/解压缩、MAC计算等操作。SSL记录协议将高层的协议数据分成较小的单元,并对它进行压缩、附加消息认证码MAC、加密、附加SSL记录头,然后通过低层的传输层协议发送,其过程如下图所示。
接收消息的过程正好与发送消息的过程相反,即解密、验证、解压、拼装,然后送给高层协议。
分段:把上层传送来的数据信息块切分为小于或等于214字节的SSL明文记录。记录中包含类型、版本号、长度和数据字段。
压缩:使用当前会话状态中定义的压缩算法对被切分后的记录块进行压缩。压缩算法将SSL明文记录转化为SSL压缩记录。压缩是可选的,且必须是无损压缩,且对原文长度的增加不能超过1024字节。
增加MAC:在压缩数据上计算消息认证MAC。所有的记录均采用在当前的加密约定中定义的加密算法和报文验证MAC算法加以保护。当握手结束后,参与双方共享一个用于加密记录和计算消息认证码MAC的公开密钥。
加密:对压缩数据及MAC进行加密。加密和消息认证码(MAC)函数将一SSL压缩记录加密转换为一SSL密文记录。传输时将包含一序列号,这样即使包丢失、被改变或包被重复收到时也可以及时发现。
增加SSL记录头: SSL记录头由5个字节组成,第一个字节说明使用SSL记录协议的高层协议类型,如:20表示更改密码说明协议、21表示报警协议、22表示握手协议、23表示应用数据协议;第二个字节表示主要版本号,如:对于SSLv3.0,值为3:第三个字节表示次要版本号,如:对于SSLv3.0,值为0:第四、第五个字节表示明文数据(如果选用压缩则是压缩数据)的长度。
4. SSL安全性
4.1 安全机制分析
- 鉴别机制:通过使用公开密钥技术和数字证书实现客户端和服务器端的身份鉴别。SSL协议建立会话时,客户端(也是TCP的客户端)在TCP连接建立之后,发出一个
client hello
发起握手,这个消息里面包含了自己可实现的算法列表和其他一些需要的消息。SSL的服务器端会回应一个server hello
,里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。默认情况下,客户端可以根据该证书的相关内容对其认证链路进行确认,最终实现对服务器端身份的鉴别,同样在需要时也可以采用类似的方法对客户端进行身份鉴别。 - 加密机制:混合密码体制的使用提供了会话和数据传输的加密性保护。在SSL握手时,使用非对称密码体制协商出本次要使用的会话密钥,并选择一种对称加密算法应用于此后数据传输的机密性保护;此外,SSL使用的加密算法和会话密钥可适时变更,如果某种算法被破解,只要选择另外的算法即可
- 完整性机制:SSL握手协议定义了共享的、可用来形成消息认证码MAC的密钥
- 抗重放攻击:使用序列号来保护通信方免受报文重放攻击
4.2 脆弱性分析
SSL协议是为解决数据传输的安全问题而设计的,实践也证明了它针对窃听和其他的被动攻击相当有效,但是由于协议本身的一些缺陷以及在使用过程中的不规范行为, SSL协议仍然存在不可忽略的安全脆弱性。
- 客户端假冒:为了减少网络性能的下降,SSL协议并不是默认要求进行客户鉴别
- SSL协议无法提供基于UDP应用的安全保护,SSL协议在握手之前需要建立TCP连接,因此不能对UDP应用进行包含
- SSL协议不能对抗通信流量分析,SSL只对应用数据保护,数据包的IP和TCP头仍然暴露在外
- 进程中的主密钥泄露:除非SSL的工程实现大部分驻留在硬件中,否则主密钥将会存留在主机的主存储器中,这就意味着任何可以读取SSL进程存储空间的攻击者都能读取主密钥
5. SSL证书
参考:What is an SSL Certificate: Definition, Types, Benefits and Validation Levels、Secure Socket Layer (SSL) - GeeksforGeeks
SSL(安全套接字层)证书是一种数字证书,用于保护和验证网站或在线服务的身份。该证书由受信任的第三方(称为证书颁发机构 (CA))颁发,该机构在颁发证书之前会验证网站或服务的身份。
SSL 证书分为三种验证类别:域验证、组织验证和扩展验证。
域验证:主要的验证类型,其中通过电子邮件、CNAME 或 HTTP 验证来验证域名所有权。网站所有者只需验证域名,证书颁发机构就会颁发SSL 证书。但是,域名验证缺乏深入的验证。
组织验证:组织验证比域验证类型更进一步。证书颁发机构 (CA) 需要业务和法律文件来验证业务身份。因此,证书所有者必须验证域名并向 CA 提交文件。验证后,证书颁发机构会颁发应安装在服务器上的 SSL证书。
扩展验证:扩展验证或EV SSL是最高级别的验证类型,其中包括域和组织验证流程。扩展验证流程为网站所有者提供经过验证的合法企业身份,以确保最终用户的安全。网站访问者可以在浏览器中查看经过验证的企业名称。在此过程中,CA可以拨打注册号码进行进一步验证。
SSL证书类型可分为单域SSL证书、多域名SSL证书、UCC证书和通配符SSL证书
单域SSL证书:单域名 SSL 证书仅保护单个域名。它可以是域名验证、组织验证或 EV SSL 证书。单域名 SSL是中小型企业的理想选择。
多域名SSL证书:多域名SSL可在单个证书中保护不同的域名和子域名。这是一种经济高效的证书,可节省开支。例如,domain.com 和 example.com可以使用多域名 SSL 进行保护。您可以在此证书中包含不同级别的子域名。
UCC证书:UCC 或统一通信证书的工作方式类似于多域 SSL证书。但是,它最适合用于 Microsoft Exchange服务器或服务。站点所有者可以使用此证书保护多个域和子域。它可以使用单个证书保护许多域和子域。
通配符SSL证书:旨在保护带有星号 ()的主域及其第一级子域。例如,.domain.com 可以保护 mail.domain.com、payment.domain.com 和example.domain.com。在 EV 验证下无法颁发通配符,因为每个子域都需要验证,而在通配符下,只需验证主域。但是,多域通配符SSL 可以覆盖不同级别的子域。