站点证书的有效性
SSL 自身不要求用户检查Web服务器证书,但大部分现代浏览器都会对证书进行简单的完整性检查,并为用户提供进行进一步彻查的手段。网景公司提出了一种Web服务器证书有效性算法是大部分浏览器有效性验证技术的基础。验证步骤如下:
- 日期检查
首先,浏览器检查证书的起始日期和结束日期,以确保证书仍然有效。如果证书过期了,或者还未被激活,则证书有效性验证失败,浏览器显示一条错误信息。
2.签名颁发者可信度检测
每个证书都是由某些证书颁发机构(CA)签发的,它们负责为服务器担保。证书有不同的等级,每种证书都要求不同级别的背景验证。比如,如果申请某个电子商务服务器证书,通常需求提供给一个营业的合法证明。
任何人都可以生成证书,但有些CA是非常著名的组织,它们通常非常清晰的流程来验证证书申请人的身份及商业行为的合法性。因此,浏览器会附带一个签名颁发机构的受信列表。如果浏览器收到了某未知(可能是恶意的)颁发机构签发的证书,那它通常会显示一条警告信息。有些证书会携带受信CA的有效签名路径,浏览器可能会选择接受所有此类证书。换句话说,如果某受信CA为 "Sam的签名商店"签发了一个证书,而Sam的签名商店也签发了一个站点证书,浏览器可能会将其作为从有效CA路径导出的证书接受。
3.签名检测
一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥,并将其与校验码进行比较,以查看证书的完整性。
4.站点身份检测
为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着去验证证书中的域名与它们所对话的服务器的域名是否匹配。服务器证书通常都会包含一个域名,但有些CA会为一组或一群服务器创建一些包含了服务器名称列表或通配域名的证书。如果主机名与证书中的标识符不匹配,面向用户的客户端要么就去通知用户,要么就以表示证书不正确的差错报文来终止连接。
通过代理以隧道的形式传输安全流量
HTTPS SSL 隧道协议,客户端首先要告知代理,他想要连接的安全主机和端口。这是在开始加密之前,以明文的形式告知的,所以代理可以理解这条信息。
HTTP通过新的名为 CONNECT 的扩展方法来发送明文形式的端点信息。CONNECT 方法会告诉代理,打开一条到所期望主机和端口的连接。这项工作完成之后,直接在客户端和服务器之间以隧道的形式传输数据。CONNECT方法就是一条单行的文本命令,它提供了由冒号分隔的安全原始服务器的主机名和端口号。
握手协议
每一个TLS连接都会以握手开始。如果客户端此前并未与服务器建立会话,那么双方会执行一次完整的握手流程来协商TLS会话。握手过程中,客户端和服务器将进行以下四个主要步骤。
1.交换各自支持的功能,对需要连接参数达成一致
2.验证出示的证书,或使用其他方式进行身份验证。
3.对将用户保护会话的共享主密钥达成一致
4.验证握手消息并未被第三方团体修改
1.客户端通过发送 Client Hello 报文开始 SSL 通信。
客户端像服务器提供如下信息:
支持的协议版本,比如 TLS 1.0 版
一个客户端生成的随机数,稍后用户生成"对话密钥"
支持加密方法,比如RSA公钥加密
支持的压缩方法
服务端可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。
综上服务端回应包含一下内容:
确认使用的加密通信协议版本,比如 TLS 1.0版本。如果浏览器与服务器版本不一致,服务器关闭加密通信。
一个服务器生成的随机数,稍后用于生成"对话密钥"
确认使用的加密方法,比如RSA 公钥加密
服务器证书
3.SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤3中的公开密钥进行加密。
接着客户端继续发送 Change Clipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
向服务器发送的信息包含下面 3 项:
一个随机数,该随机数用服务器公钥加密,防止被窃听
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
4.服务器同时发送 Change Clipher Spec 报文
服务器同样发送Finished报文
服务器和客户端的 Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
应用层协议通信,即发送HTTP响应
5.最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN报文来关闭与TCP的通信。
网友评论