初识X.509证书,多半是HTTPS协议,SSL或TLS握手阶段,需要用证书传输公钥,建立加密的传输信道。于是在印象中X.509就和HTTPS绑定在了一起。这种绑定有些许先入为主。实际上X.509证书的用途不止如此。
现成的知识
网上已经很多写得好的文章,推荐一篇:X.509数字证书的基本原理及应用。从中我们可以总结出几个要点
- 数字证书的目的在于安全地分发公钥
- 数字证书 = 公钥 + 公钥所属实体 + 签名
- 数字证书分多级,一般有根证书、中间证书、叶子证书,根证书安装在系统中,叶子证书和中间证书需要根证书进行验证
除此之外,没有更多的理论信息。博客的输出往往只是作者知识学习过程的输出,常很片面,仅能作为知识交流和了解的方式,不能作为严肃学习的主要来源(包括我这篇)。优秀如此文,看完也还是虚空之感,因为我们不知道还有多少相关知识是不知道的。
原材料
学习X.509的误区之一,是将它与HTTPS、TLS等协议结合在一起,然后被这些协议的其它知识点搞得头昏目眩。就像JWT,如果只是和登录鉴权结合在一起,就会忽略它本身的特性。
我们往往对一个技术的支撑技术缺乏了解,甚至缺乏了解的耐心。
最好的方式还是阅读RFC,相关文档如下
- RFC5280:主协议,描述X.509用途、结构、验证方式等
- RFC2560:OCSP协议,在线证书状态协议,描述如何实时获取证书的状态,即有效性
- RFC4491、RFC3279、RFC4055:附加协议,描述了在证书中使用的加密算法
其中,RFC5280需要认真阅读,其它协议选读,了解即可。
RFC5280
基础
-
证书是什么
全面地说应该叫做公钥证书,它是一种数据结构,用来绑定公钥值,该绑定加上了CA签名让它变得可信。CA通过技术手段使得这种可信变得有保证。一般来说,这种技术手段是操作系统内置根证书+证书的路径验证。
-
用途
-
网站通信,即常规的HTTPS
-
电子邮件
-
用户鉴权,可参考JWS的x5c字段
-
IPsec
-
-
证书生命周期
证书的证书的生命周期,是根据它的签名内容而定的,即证书并不是永久的。因为证书可能被仿冒。
现在很多以年为单位,这可能只是业务上的生命周期,并不一定是技术上的生命周期,理论上说这有一定的安全隐患。
-
证书path
用户拿到证书,如果不拥有颁发该证书的CA的可信的公钥,此时需要另一个证书来获取该CA的可信公钥。这样可以形成一个证书链,这叫做证书路径。
-
证书分类
-
CA证书
- 交叉证书:签发方和证书主体来自不同的实体。用于描述两个CA的互信关系
- 自签发证书:签发方和证书主体是同一个实体
- 自签名证书:属于自签发证书的一种,它的签名可以用证书自带的公钥验证。这个用在证书路径的根部,即根证书
-
终端实体证书
颁发给无权颁发证书的实体
-
-
证书撤回
签发的证书在实际有效期前可以被撤销,是通过Certificate Revoke List的方式ÿ