目录
引言
上一篇博文我们在最后简单引入了公钥认证,这篇博文将正式学习有关认证的知识。
5.4 数字证书
数字证书由权威机构发型,人们可以在互联网上用来识别对方的身份。
证书遵循国际标准 ITUTX.509,主要包括下面的内容:
- 版本信息
- 序列号,每个证书都有唯一的序列号
- 使用的签名算法
- 签发机构(命名规则一般采用 X.500格式)
- 有效期
- 证书所有人的名称
- 证书所有人的公钥 public key
- 证书发行者的签名
5.4 1 证书的目的
- 证明某个 public key 确实是某个人所有的
- 证书本身是有第三方签署的(Cetificate Signature)
5.4 2 证书等级
5.4.3 SSL 证书类型
域名验证(Domain validation)
最常使用的验证方式。
验证请求者是否对网站的域名有一定的控制权。
例如如果登录一个网站,网站需要你提供一些私人的信息,那么这个时候我们就需要通过查看当前让我们提供身份信息的服务器是否拥有这个网站的控制权,以免是其他身份不明者冒充的。
- 在这个例子中,客户端是右边,提供服务的网站在左边。
- 首先右边先要求左边的网站执行第一个操作 Put… 这个行为是为了证明当前的网络服务器对这个域名是有操作和控制权的。
- 第二步是让网站对一个随机数进行签名,以证明网站具有私钥,证明网站拥有私钥以此证明自己的验证网站身份。
问题:
域名验证并没有将 domain 和一个现实世界的实体建立联系,因此还是有可能被欺骗。
假设现在左边的机构是有问题的,然后右边要让左边完成上述的两个动作,然后左边的问题机构将第一个验证控制权的问题发给真正的经过授权的机构,然后将正确机构返回的结果直接返回给右边,那么右边不能发觉左边问题机构是有问题的。
对于私钥签名的问题,左边只需要确实用自己假的私钥进行签名,然后把公钥发送给右边,右边的用户也完全察觉不到问题。
机构验证(Organization validation)
验证这个网站是不是一个合法的网站。
扩展验证(Extended validation)
核实法人实体、管辖权和授权官员的存在(例如,实际地址、电话#)。
证书撤销(certificate revocation)
- 当发现错误的签发问题,那么要撤回签发的证书。
- 当一个机构的私钥泄露,那么也要撤回签发的证书。
证书吊销列表
权威机构会将所有需要吊销证书的域名维护在一个 list 中,每次用户访问某个网站的时候都去查这个完整的 list,看看当前的网站是否出现在这个 list 中,如果出现,那就不访问了。
- 这种方式速度较慢,但是可以保证 privacy
OCSP:Online Certificate Status Protocol(在线证书状态协议)
- 用户 / browser 直接询问 CA 某个证书是否已经被吊销,
- 这种方式快,但是容易存在隐私问题。
- 证书透明性。
证书的透明度(CT)
监测和审计证书的开放框架。
旨在提供一种监测已颁发的证书的方法。
检测:
- 误发的证书
- 恶意获取的证书
- 流氓CA
使用加密的仅有附录的日志来记录证书的发放情况。
- 默克尔树:一致性和成员验证。
服务器应发送SCT(签名的证书时间戳)。
- SCT是由CT日志发出的,以证明其包含性。
浏览器可以选择拒绝不在CT日志上的证书。
SCT是X.509的一个扩展。
5.4.4 SSL / TLS
- Internet 传输层 安全通信协议
- 支持所有流行的web浏览器、web服务器、internet商务网站
- 在 HTTP 的基础上实现了 TLS 协议 -> HTTPS
5.4.5 Handshake 协议
在客户端和服务器之间运行。
- 例如,客户端=网络浏览器,服务器=网站。
协商协议的版本和要使用的加密算法集。
- 不同实现方式之间的互操作性。
验证服务器和客户端(可选)。
- 使用数字证书来了解对方的公钥。
并验证对方的身份。
- 通常只有服务器被认证。
使用公钥建立一个共享秘密。
使用 公钥加密 在客户端和服务器之间 建立多个共享密钥
客户机和服务器之间的初始协商,确定其在TLS中后续交互的参数
具体流程如下:
- 客户端向服务器发送自己使用的协议版本、加密算法等
- 服务器根据客户端的各种版本决定最终使用哪种协议版本以及加密算法进行通信
- 服务器发送包含其公钥或其Diffie-Hellman公钥gy的公钥证书(取决于所选的加密套件)
- 这个步骤是验证证书的阶段
- client 通过 server 提供的公钥对自己的私钥进行加密,并把加密的私钥发送给 server
- 客户端向服务器发送ClientHello,要求进行安全连接,并列出其支持的密码套件。
- 服务器响应ServerHello,并选择它所支持的密码套件之一,还包括它的证书,并可以要求客户端发送它的证书(相互认证)。
- 客户端确认证书的有效性
- 客户端生成会话密钥
- 或者直接选择一个随机的密钥,用服务器的公钥进行加密,或者
- 通过运行Diffie-Hellman密钥交换协议,提供更好的安全性
- 握手结束,双方共享一个密钥,然后用于加密/解密信息。