背景
在做一个区块链项目时,区块链底层平台采用PBFT共识,没有配置块的概念,fabric有配置块约定链的权限。当删除一个节点时由于证书还没有吊销,被删除节点还可以自己启动加入区块链网络,这里实现证书吊销十分有必要。
x509证书吊销
什么是证书吊销
证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件,该文件包含了证书颁发机构 (CA) 已经吊销的证书的序列号及其吊销日期。 CRL 文件中还包含证书颁发机构信息、吊销列表失效时间和下一次更新时间,以及采用的签名算法等。证书吊销列表最短的有效期为一个小时,一般为 1 天,甚至一个月不等,由各个证书颁发机构在设置其证书颁发系统时设置。
证书吊销列表(CRL)与证书状态在线查询协议(OCSP)
讲到吊销列表,就不得不讲讲 OCSP ,Online Certificate Status Protocol, 证书状态在线查询协议, 是 IETF 颁布的用于实时查询数字证书在某一时间是否有效的标准。
上面已经提到,一般 CA 都只是 每隔一定时间 ( 几天或几个月 ) 才发布新的吊销列表,可以看出: CRL 是 不能及时反映证书的实际状态的。而 OCSP 就能满足实时在线查询证书状态的要求。它为电子商务网站提供了一种实时检验数字证书有效性的途径,比下载和处理 CRL 的传统方式更快、更方便和更具独立性。请求者发送查询请求, OCSP 服务器会返回证书可能的三个状态:正常、吊销和未知。
OCSP 服务由独立的 OCSP 服务器来提供服务,目前WoSign新证书颁发系统支持 OCSP 方式查询证书状态。 OCSP 也是一个可以访问的 http 网站。
证书吊销作用
在服务程序使用到证书时,一定会先检查此证书是否已经被吊销,也就是说会查询吊销列表或 OCSP 服务, 如果此证书已经被证书颁发机构吊销,则认为持有该证书的角色为非法的,不会进行后续的操作。
证书吊销原理
一般来讲CA会有证书吊销的接口,下文中会通过openssl做一些自建CA,签发证书,吊销证书,创建CRL等操作。创建CRL最终会生成.crl文件,在验证证书时,会检测证书是否在.crl文件里,即判断是否已经注销。
例如x509上,创建CRL函数:
func (c *Certificate) CreateCRL(rand io.Reader, priv interface{}, revokedCerts []pkix.RevokedCertificate, now, expiry time.Time) (crlBytes []byte, err