吊销列表
吊销列表(Certificate Revocation List)列出不能再使用的证书。吊销列表文件具有两种格式:
一种是二进制格式,使用DER的编码格式,DER是BER编码规则的一个子集;文件名以.crl结尾。
另外一种是文本格式,使用的是Base64编码并且带头带尾的特定格式,Base64是用于将不可见字符转换为可见字符的一种编码;文件名以.pem结尾。
吊销列表内容
吊销列表文件包含以下内容:吊销证书的序列号,吊销日期,以及吊销列表文件自身的一些信息如类型,版本,更新日期,下次更新日期,签名算法等。我们可以下载CERTivity软件查看CRL文件内容。
- 打开CERTivity
- 执行快捷键“CTRL+L”选择需要打开CRL文件(CERTivity自带了示例的crl文件)
- 点击确定
另外一种获取吊销列表文件及打开吊销列表文件的方式:
- 随便打开一个https的网站,然后按照下图的方式寻找CRL分发点的URL
- 复制CRL分发点的URL到新的浏览器页签下载CRL文件
- 双击CRL文件
CRL文件的常规信息CRL文件的吊销证书序列号和吊销日期
最后再介绍一种更方便的查看吊销列表的方式,之前刚接触crl时,不知道可以使用这种方式打开
openssl crl -noout -text -in index.crl
如何确定吊销列表吊销的是哪一张证书?
public boolean equals(Object var1) {
if (var1 == this) {
return true;
} else if (!(var1 instanceof X509CRLImpl.X509IssuerSerial)) {
return false;
} else {
X509CRLImpl.X509IssuerSerial var2 = (X509CRLImpl.X509IssuerSerial)var1;
return this.serial.equals(var2.getSerial()) && this.issuer.equals(var2.getIssuer());
}
}
如上是Java库中X509CRLImpl类中比较两个证书是否相同的代码,从代码中可以发现比较两个证书是否相同是比较了序列号和颁发者。所以我们如果需要唯一确定一张证书,需要确定它的序列号和颁发者。
如何创建证书吊销列表
-
吊销证书
openssl ca -revoke cert_name.crt -cert root_cert_name.crt -keyfile root_cert_name.key
吊销证书之后,记录证书的文件demoCA/index.txt中状态由V变为R,如下V 201121083403Z 00 unknown /C=CN/ST=Beijing/O=huawei.com/CN=A ↓ R 201121083403Z 00 unknown /C=CN/ST=Beijing/O=huawei.com/CN=A
同时,如果不吊销则无法创建Common name相同的证书。
- 创建吊销列表
openssl ca -gencrl -out index.crl -cert root_cert_name.crt -keyfile root_cert_name.key
root_cert_name.crt和root_cert_name.key是上级证书和上级证书的私钥
创建吊销列表之前需要先吊销证书,如果不吊销证书,那在生成吊销列表时将不会包含需要吊销的证书
Java代码读取CRL文件
public static void main(String[] args) {
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
InputStream fileInputStream = new FileInputStream(new File("xxx.crl"));
X509CRL x509CRL = (X509CRL) certificateFactory.generateCRL(fileInputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。