吊销列表

吊销列表(Certificate Revocation List)列出不能再使用的证书。吊销列表文件具有两种格式:
 一种是二进制格式,使用DER的编码格式,DER是BER编码规则的一个子集;文件名以.crl结尾。
 另外一种是文本格式,使用的是Base64编码并且带头带尾的特定格式,Base64是用于将不可见字符转换为可见字符的一种编码;文件名以.pem结尾。

吊销列表内容

吊销列表文件包含以下内容:吊销证书的序列号,吊销日期,以及吊销列表文件自身的一些信息如类型,版本,更新日期,下次更新日期,签名算法等。我们可以下载CERTivity软件查看CRL文件内容。

  1. 打开CERTivity
    1.png
  2. 执行快捷键“CTRL+L”选择需要打开CRL文件(CERTivity自带了示例的crl文件)
    2.png
  3. 点击确定
    3.png

另外一种获取吊销列表文件及打开吊销列表文件的方式:

  1. 随便打开一个https的网站,然后按照下图的方式寻找CRL分发点的URL
    5.png
  2. 复制CRL分发点的URL到新的浏览器页签下载CRL文件
  3. 双击CRL文件
    CRL文件的常规信息
    6.png

    CRL文件的吊销证书序列号和吊销日期
    7.png

最后再介绍一种更方便的查看吊销列表的方式,之前刚接触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类中比较两个证书是否相同的代码,从代码中可以发现比较两个证书是否相同是比较了序列号和颁发者。所以我们如果需要唯一确定一张证书,需要确定它的序列号和颁发者。

如何创建证书吊销列表

  1. 吊销证书
    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相同的证书。

  2. 创建吊销列表
    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();
    }
}

水一水
39 声望5 粉丝

总结经验,提升自己