在前一章中我们了解到,https使用SSL协议通过加密传输数据来保护通信安全。在深入研究之前,先了解SSL是如何工作的。
先了解下面两个密码学中的基本概念:
- 非对称加密
- 对称加密
非对称加密
非对称加密技术使用数学上关联的密钥对对数据进行加密和解密。在密钥对中,一个密钥是公开的,称为公钥;另一个是保密的,称为私钥。
密钥本质上是一个数值,使用数学算法产生。
在非对称加密技术里,可以用私钥加密数据,然后使用该私钥对应的公钥解密数据,或者相反使用公钥加密数据,然后使用私钥解密数据。
非对称加密的优点是解决了密钥的传输问题,因为公钥不怕公开。
SSL通信时先使用非对称加密技术进行握手。常用的非对称加密算法有EIGamal、RSA、DSA、椭圆曲线技术和PKCS。
对称加密
对称加密技术,只使用一个密钥对数据进行加密和解密。发送方和接收方都拥有此密钥。
SSL在完成握手之后使用对称加密技术进行会话数据传输。常用的对称算法是AES-128、AES-192和AES-256。
SSL传输数据
SSL协议使用非对称加密和对称加密技术确保数据传输安全。
下图展示了SSL通信的步骤:
从上图中可以看到,浏览器和web服务器(或任何其他通信双方)之间的SSL通信主要分为两个步骤:
- SSL握手
- 实际的数据传输
SSL 握手
SSL通信先要进行SSL握手。SSL握手使用非对称加密技术,进行握手时浏览器获取web服务器公钥,然后建立安全连接。
下图展示了SSL握手步骤:
如上图所示:
- 客户机发送一条“客户机hello”消息。消息里包括了客户机的SSL版本号、密码设置、会话相关数据以及其他信息。
- 服务器发送一条“服务器hello”响应消息。消息里包括了服务器的SSL版本号、密码设置、会话相关数据、带有公钥的SSL证书以及其他信息。
- 客户机从CA(Certificate Authority/证书颁发机构)验证服务器的SSL证书,并对服务器进行身份验证。如果身份验证失败,则客户机拒绝SSL连接并抛出异常。如果身份验证成功,则继续执行步骤4。
- 客户机创建一个会话密钥,用服务器的公钥加密它并将其发送到服务器。如果服务器请求验证客户机身份(主要是在服务器到服务器通信中),则客户机将自己的证书发送给服务器。
- 服务器使用其私钥解密会话密钥,并将确认消息(使用会话密钥加密)发送给客户机。
在SSL握手结束时,客户机和服务器都有一个有效的会话密钥,它们将使用该密钥加密或解密实际数据。此后将不再使用公钥和私钥。
实际数据传输
客户机和服务器现在使用共享的会话密钥对实际的传输数据进行加密和解密,这里使用的是对称加密,对称加密的优点是简单,消耗资源少。
因此,SSL基本上使用非对称加密和对称加密。在现实生活中,实现SSL通信涉及到某些基础设施,这些基础设施称为公钥基础设施。
公钥基础设施
公钥基础设施(PKI)是创建、管理、分发、使用、存储和撤销数字证书的一系列角色、策略和过程。
PKI包括以下要素:
- 证书颁发机构: 对个人、计算机和其他实体的身份进行认证的机构。
- 注册机构: 代表root CA颁发特定用途证书的从属CA。
- SSL证书: 包含公钥和其他信息的数据文件。
- 证书管理系统: 存储、验证和撤销证书的系统。