本文简要介绍了SSL/TLS协议的运行机制,然后围绕几个点去重点讲解其相关的设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅文档
基础概念
简介
HTTPS (Hypertext Transfer Protocol Secure)超文本传输安全协议,是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包
作用
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生
SSL/TLS握手
第一次建立SSL/TLS握手
- client_hello
客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下: 1、支持的最高TSL协议版本version,从低到高依次SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2,当前基本不再使用低于TLSv1的版本 2、客户端支持的加密套件cipher suites 列表, 每个加密套件对应前面TLS原理中的四个功能的组合:认证算法Au(身份验证)、密钥交换算法KeyExchange(密钥协商)、对称加密算法Enc(信息加密)和信息摘要Mac(完整性校验) 3、支持的压缩算法 compression methods 列表,用于后续的信息压缩传输 4、随机数random_C,用于后续的密钥的生成 6、扩展字段 extensions,支持协议与算法的相关参数以及其它辅助信息等复制代码
- server_hello+server_certificate+sever_hello_done
1、server_hello, 服务端返回协商的信息结果,包括选择使用的协议版本version,选择的加密套件cipher suite,选择的压缩算法compression method、随机数random_S等,其中随机数用于后续的密钥协商 2、server_certificates, 服务器端配置对应的证书链,用于身份验证与密钥交换 3、server_hello_done,通知客户端server_hello信息发送结束复制代码
- 证书校验
客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下: 1、证书链的可信性trusted certificate path,方法如前文所述 2、证书是否吊销revocation,有两类方式离线CRL与在线OCSP,不同的客户端行为会不同 3、有效期expiry date,证书是否在有效时间范围 4、域名domain,核查证书域名是否与当前的访问域名匹配复制代码
- client_key_exchange+change_cipher_spec+encrypted_handshake_message
1、client_key_exchange,合法性验证通过之后,客户端计算产生随机数字Pre-master,并用证书公钥加密,发送给服务器此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数random_C和random_S与自己计算产生的Pre-master,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master) 2、change_cipher_spec,客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信 3、encrypted_handshake_message,结合之前所有通信参数的hash值与其它相关信息生成一段数据,采用协商密钥session secret与算法进行加密,然后发送给服务器用于数据与握手验证复制代码
- change_cipher_spec+encrypted_handshake_message
1、服务器用私钥解密加密的Pre-master数据,基于之前交换的两个明文随机数random_C和random_S,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master) 2、计算之前所有接收信息的hash值,然后解密客户端发送的encrypted_handshake_message,验证数据和密钥正确性 3、change_cipher_spec, 验证通过之后,服务器同样发送change_cipher_spec以告知客户端后续的通信都采用协商的密钥与算法进行加密通信 4、encrypted_handshake_message, 服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥session secret与算法加密并发送到客户端复制代码
- 握手结束
客户端计算所有接收信息的hash值,并采用协商密钥解密encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成复制代码
- 加密通信
开始使用协商密钥与算法进行加密通信复制代码
会话缓存
1、会话标识session ID:由服务器端支持,协议中的标准字段,因此基本所有服务器都支持,服务器端保存会话ID以及协商的通信信息,Nginx中1M内存约可以保存4000个session ID机器相关信息,占用服务器资源较多2、会话记录session ticket:需要服务器和客户端都支持,属于一个扩展字段,支持范围约60%,将协商的通信信息加密之后发送给客户端保存,密钥只有服务器知道,占用服务器资源很少复制代码
二者对比,主要是保存协商信息的位置与方式不同,类似与http中的session与cookie,二者都存在的情况下,(nginx实现)优先使用session_ticket
重新连接
重建连接:即放弃正在使用的TLS连接,从新进行身份认证和密钥协商的过程,特点是不需要断开当前的数据传输就可以重新身份认证、更新密钥或算法,因此服务器端存储和缓存的信息都可以保持。客户端和服务器都能够发起重建连接的过程(windows 2000XP与SSL2.0好像不太支持)
服务器端重建连接一般情况是客户端访问受保护的数据时发生。基本过程如下:
1、客户端和服务器之间建立了有效TLS连接并通信;2、客户端访问受保护的信息;3、服务器端返回hello_request信息4、客户端收到hello_request信息之后发送client_hello信息,开始重新建立连接复制代码
1、客户端和服务器之间建立了有效TLS连接并通信2、客户端需要更新密钥,主动发出client_hello信息3、服务器端收到client_hello信息之后无法立即识别出该信息非应用数据,因此会提交给下一步处理,处理完之后会返回通知该信息为要求重建连接4、在确定重建连接之前,服务器不会立即停止向客户端发送数据,可能恰好同时或有缓存数据需要发送给客户端,但是客户端不会再发送任何信息给服务器5、服务器识别出重建连接请求之后,发送server_hello信息至客户端6、客户端也同样无法立即判断出该信息非应用数据,同样提交给下一步处理,处理之后会返回通知该信息为要求重建连接7、客户端和服务器开始新的重建连接的过程复制代码
CA证书
证书=公钥+申请者与颁发者信息+签名
- CA证书申请过程
1、服务方S向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证2、CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等3、如信息审核通过,CA会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA的私钥对信息摘要进行加密,密文即签名;复制代码
- CA证书工作过程
1、客户端向服务器发出请求时,服务端返回证书文件2、客户端读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后利用对应CA的公钥解密签名数据,对比证书的信息摘要,如果一致则可以确认证书的合法性,即公钥合法3、客户端然后验证证书相关的域名信息、有效时间等信息4、客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应CA的证书,证书也会被判定非法复制代码
- CA证书使用注意
1、申请证书不需要提供私钥,确保私钥永远只能服务器掌握2、证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名3、内置CA对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书复制代码
- 关于证书链
1、什么是证书链?答:由服务器证书、中间证书(服务器证书签发机构的证书)与根证书在一起组合成一条合法证书集合我们叫证书链2、证书链的作用?提供自下而上的信任传递传递(比如客户端并没有安装你的服务器证书,但是客户端可以通过系统自带的证书来校验服务器证书的合法性3、证书名称解释 (a)服务器证书server.pem的签发者为中间证书机构inter,inter根据证书inter.pem验证server.pem确实为自己签发的有效证书 (b)中间证书inter.pem的签发CA为root,root根据证书root.pem验证inter.pem为自己签发的合法证书; (c)客户端内置信任CA的root.pem证书,因此服务器证书server.pem的被信任。4、证书吊销CA机构能够签发证书,同样也存在机制宣布以往签发的证书无效。证书使用者不合法,CA需要废弃该证书;或者私钥丢失,使用者申请让证书无效。主要存在两类机制:CRL与OCSPCRL:Certificate Revocation List, 证书吊销列表(什么是证书吊销列表(CRL)?吊销列表起什么作用),一个单独的文件。该文件包含了CA已经吊销的证书序列号(唯一)与吊销日期,同时该文件包含生效日期并通知下次更新该文件的时间,当然该文件必然包含CA私钥的签名以验证文件的合法性。证书中一般会包含一个URL地址CRL Distribution Point,通知使用者去哪里下载对应的CRL以校验证书是否吊销。该吊销方式的优点是不需要频繁更新,但是不能及时吊销证书,因为CRL更新时间一般是几天,这期间可能已经造成了极大损失。OCSP:Online Certificate Status Protocol, 证书状态在线查询协议,一个实时查询证书是否吊销的方式。请求者发送证书的信息并请求查询,服务器返回正常、吊销或未知中的任何一个状态。证书中一般也会包含一个OCSP的URL地址,要求查询服务器具有良好的性能。部分CA或大部分的自签CA(根证书)都是未提供CRL或OCS 地址的,对于吊销证书会是一件非常麻烦的事情。复制代码
中间人攻击
在HTTPS网络中想做中间人攻击,必须要在握手之前接入到网络中,一旦HTTPS握手过程结束,之后传输的数据完全都是加密的,解密非常的困难。于是最简单的方法就是伪造一个证书,同时要实现TLS协议,在握手开始前进行中间人攻击。另外,HTTPS握手过程对密码协商的验证是很严格的,中间验证数据的环节一旦有异常,浏览器和网站都会中断连接,因此伪造SSL证书进行中间人攻击目前是对HTTPS网络最好攻击方式,但是伪造的证书无法经过浏览器的受信检查会给出提示
非常感谢您花费时间阅读这份文章!