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