公钥的信任问题
之前我们介绍对称加密、非对称加密、信息摘要、数字签名,能实现信息的完整性、加密性。但也存在安全问题。
比如A、B进行通信时,A需要将自己的公钥给对方,以便加密,如果被黑客拦截,并将黑客自己的公钥发送给B,B收到黑客的密钥后,误以为就是A发送的公钥,使用黑客的公钥加密数据发送,黑客再次拦截B发送的信息,用黑客的密钥解密,读取原文内容,再使用A的公钥加密,发送给A。同样B发送给A公钥时,也被拦截,这样黑客都有A、B的公钥,A、B获取的都是黑客的公钥,在通信时,都可以被黑客截取并获取内容,这样是非常不安全的。以上问题是由于无法知道公钥可否可信任导致,如果第三方公证机构,对公钥进行公证,发送信息前,去机构查询当前公钥的拥有者及其他信息,则可解决这些问题。
数字证书
数字证书是由认证机构(认证权威)颁发,包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及一些扩展信息的数字文件。
数字证书解决公钥的信任问题,防止黑客伪造公钥。
数字证书的格式普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:
- 证书的版本信息;
- 证书的序列号,每个证书都有一个唯一的证书序列号
- 证书所使用的签名算法
- 证书的发行机构名称,命名规则一般采用X.500格式
- 证书的有效期,通用的证书—般采用UTC时间格式
- 证书所有人的名称,命名规则一般采用X.500格式
- 证书所有人的公开密钥
- 证书发行者对证书的签名
颁发流程
- 数字证书申请人将申请数字证书所需的数字证书内容信息提供给认证机构
- 认证机构确认申请人所提交信息的正确性,这些信息将包含在数字证书中
- 由持有认证机构私钥的签证设备给数字证书加上数字签名
- 将数字证书的一个副本传送给用户
- 将数字证书的一个副本传送到数字证书数据库如目录服务,以便公布
使用流程
数字证书中,最重要的是拥有者的公钥和CA添加的数字签名。
使用数字证书的发送信息校验流程如下:
- 发送方 发送加密信息并携带CA机构颁发的数字证书
- 接收方收到后,去CA机构查询当前证书是否可信
- 证书可信,使用CA机构公开的公钥,对证书进行验签
- 验签通过,说明证书未被篡改
- 取出发送方的公钥,对小明发送的信息进行验签
- 验签通过,说明发送方发送的信息可信
SSL数字证书
HTTPS
HTTP 超文本传输协议
HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。提供身份验证与加密通讯。
HTTPS = HTTP+SSL/TLS,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密。
当用户通过HTTP协议访问网站时,客户端与服务器之间传输的数据,如账号、密码、在线交易记录等敏感信息都是明文的,这样就会存在诸如信息泄露、窃取、篡改等安全隐患。而在使用HTTPS协议进行访问网站,客户端与服务器之间建立起SSL加密通道,并给网站加上一把安全锁,从而防止敏感数据被窃听、泄露或篡改,保证网络数据传输的安全,确保通信数据的保密性和完整性。
SSL/TLS证书
SSL证书是数字证书的一种,全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0。
TLS的全称是Transport Layer Security,即安全传输层协议,建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。
通信过程
- 网站向CA机构申请数字证书
- CA机构颁发证书给网站,使用私钥对证书进行签名,网站部署证书,提供HTTPS访问链接
- 浏览器发起HTTPS请求
- 网站服务端会将证书响应给浏览器
- 浏览器保存当前证书,对证书进行检查,验证其合法性
- 对证书进行验签,操作系统默认会有CA机构的公钥,验签通过,取出证书中网站的公钥
- 浏览器会生成一个随机值对称秘钥(客户端对称秘钥)
- 浏览器使用网站公钥将客户端对称秘钥加密,并发送网站,网站收到后,使用私钥解密,并保存客户端的公钥
- 客户端和服务端都保存了对称秘钥,这样,就可以进行加密互相传输数据了