Module java.base

Class X509CRL

java.lang.Object
java.security.cert.CRL
java.security.cert.X509CRL
所有已实现的接口:
X509Extension

public abstract class X509CRL extends CRL implements X509Extension

用于X.509证书吊销列表(CRL)的抽象类。CRL是一个时间戳列表,用于标识被吊销的证书。它由证书颁发机构(CA)签名,并在公共存储库中免费提供。

每个被吊销的证书在CRL中通过其证书序列号进行标识。当使用证书的系统使用证书(例如,用于验证远程用户的数字签名),该系统不仅检查证书签名和有效性,还获取一个适当最新的CRL,并检查证书序列号是否在该CRL中。"适当最新"的含义可能会根据本地政策而有所不同,但通常意味着最近发布的CRL。CA会定期(例如,每小时、每天或每周)发布新的CRL。随着吊销的发生,条目会被添加到CRL中,并且当证书到期日期到达时,条目可能会被移除。

X.509 v2 CRL格式在ASN.1中描述如下:

 CertificateList  ::=  SEQUENCE  {
     tbsCertList          TBSCertList,
     signatureAlgorithm   AlgorithmIdentifier,
     signature            BIT STRING  }
 

更多信息可以在RFC 5280: 互联网X.509公钥基础设施证书和CRL配置文件中找到。

tbsCertList的ASN.1定义如下:

 TBSCertList  ::=  SEQUENCE  {
     version                 Version OPTIONAL,
                             -- 如果存在,必须是v2
     signature               AlgorithmIdentifier,
     issuer                  Name,
     thisUpdate              ChoiceOfTime,
     nextUpdate              ChoiceOfTime OPTIONAL,
     revokedCertificates     SEQUENCE OF SEQUENCE  {
         userCertificate         CertificateSerialNumber,
         revocationDate          ChoiceOfTime,
         crlEntryExtensions      Extensions OPTIONAL
                                 -- 如果存在,必须是v2
         }  OPTIONAL,
     crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
                                  -- 如果存在,必须是v2
     }
 

CRL是使用证书工厂实例化的。以下是如何实例化X.509 CRL的示例:


 try (InputStream inStream = new FileInputStream("fileName-of-crl")) {
     CertificateFactory cf = CertificateFactory.getInstance("X.509");
     X509CRL crl = (X509CRL)cf.generateCRL(inStream);
 }
 
自版本:
1.2
参见:
  • Constructor Details

    • X509CRL

      protected X509CRL()
      X.509 CRL的构造函数。
  • Method Details

    • equals

      public boolean equals(Object other)
      将此CRL与给定对象进行相等性比较。如果other对象是X509CRL的实例,则会检索其编码形式并与此CRL的编码形式进行比较。
      覆盖:
      equals 在类 Object
      参数:
      other - 用于与此CRL进行相等性测试的对象。
      返回:
      如果两个CRL的编码形式匹配,则返回true,否则返回false。
      参见:
    • hashCode

      public int hashCode()
      从其编码形式为此CRL返回哈希码值。
      覆盖:
      hashCode 在类 Object
      返回:
      哈希码值。
      参见:
    • getEncoded

      public abstract byte[] getEncoded() throws CRLException
      返回此CRL的ASN.1 DER编码形式。
      返回:
      此证书的编码形式
      抛出:
      CRLException - 如果发生编码错误。
    • verify

      验证此CRL是否使用与给定公钥对应的私钥进行签名。
      参数:
      key - 用于进行验证的公钥。
      抛出:
      NoSuchAlgorithmException - 不支持的签名算法。
      InvalidKeyException - 错误的密钥。
      NoSuchProviderException - 如果没有默认提供程序。
      SignatureException - 签名错误。
      CRLException - 编码错误。
    • verify

      验证此CRL是否使用与给定公钥对应的私钥进行签名。此方法使用给定提供程序提供的签名验证引擎。
      参数:
      key - 用于进行验证的公钥。
      sigProvider - 签名提供程序的名称。
      抛出:
      NoSuchAlgorithmException - 不支持的签名算法。
      InvalidKeyException - 错误的密钥。
      NoSuchProviderException - 错误的提供程序。
      SignatureException - 签名错误。
      CRLException - 编码错误。
    • verify

      验证此CRL是否使用与给定公钥对应的私钥进行签名。此方法使用给定提供程序提供的签名验证引擎。请注意,指定的Provider对象不必在提供程序列表中注册。此方法已添加到Java平台标准版的1.8版本中。为了与现有服务提供程序保持向后兼容,此方法不是abstract,并提供了默认实现。
      参数:
      key - 用于进行验证的公钥。
      sigProvider - 签名提供程序。
      抛出:
      NoSuchAlgorithmException - 不支持的签名算法。
      InvalidKeyException - 错误的密钥。
      SignatureException - 签名错误。
      CRLException - 编码错误。
      自版本:
      1.8
    • getVersion

      public abstract int getVersion()
      从CRL中获取version(版本号)值。此项的ASN.1定义如下:
       version    Version OPTIONAL,
                   -- 如果存在,必须是v2
      
       Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
                   -- v3不适用于CRL,但为了与证书的Version定义保持一致而出现
       
      返回:
      版本号,即1或2。
    • getIssuerDN

      @Deprecated(since="16") public abstract Principal getIssuerDN()
      Deprecated.
      Use getIssuerX500Principal() instead. This method returns the issuer as an implementation specific Principal object, which should not be relied upon by portable code.
      获取CRL中的issuer(颁发者可分辨名称)值。颁发者名称标识签署(和颁发)CRL的实体。

      颁发者名称字段包含X.500可分辨名称(DN)。其ASN.1定义如下:

       issuer    Name
      
       Name ::= CHOICE { RDNSequence }
       RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
       RelativeDistinguishedName ::=
           SET OF AttributeValueAssertion
      
       AttributeValueAssertion ::= SEQUENCE {
                                     AttributeType,
                                     AttributeValue }
       AttributeType ::= OBJECT IDENTIFIER
       AttributeValue ::= ANY
       
      Name描述了由属性(如国家名称)和相应值(如US)组成的分层名称。 AttributeValue组件的类型由AttributeType确定;通常它将是一个directoryStringdirectoryString通常是PrintableStringTeletexStringUniversalString之一。
      返回:
      其名称为颁发者可分辨名称的Principal。
    • getIssuerX500Principal

      public X500Principal getIssuerX500Principal()
      X500Principal形式返回CRL中的颁发者(颁发者可分辨名称)值。

      建议子类重写此方法。

      返回:
      表示颁发者可分辨名称的X500Principal
      自:
      1.4
    • getThisUpdate

      public abstract Date getThisUpdate()
      从CRL中获取thisUpdate日期。其ASN.1定义如下:
       thisUpdate   ChoiceOfTime
       ChoiceOfTime ::= CHOICE {
           utcTime        UTCTime,
           generalTime    GeneralizedTime }
       
      返回:
      来自CRL的thisUpdate日期。
    • getNextUpdate

      public abstract Date getNextUpdate()
      从CRL中获取nextUpdate日期。
      返回:
      来自CRL的nextUpdate日期,如果不存在则返回null。
    • getRevokedCertificate

      public abstract X509CRLEntry getRevokedCertificate(BigInteger serialNumber)
      获取具有给定证书序列号的CRL条目(如果有)。
      参数:
      serialNumber - 要查找CRL条目的证书序列号
      返回:
      具有给定序列号的条目,如果此CRL中不存在此类条目则返回null。
      参见:
    • getRevokedCertificate

      public X509CRLEntry getRevokedCertificate(X509Certificate certificate)
      获取给定证书的CRL条目(如果有)。

      此方法可用于查找间接CRL中的CRL条目,即包含来自CRL颁发者以外颁发者的条目的CRL。默认实现仅返回由CRL颁发者颁发的证书的条目。希望支持间接CRL的子类应重写此方法。

      参数:
      certificate - 要查找CRL条目的证书
      返回:
      给定证书的条目,如果此CRL中不存在此类条目则返回null。
      抛出:
      NullPointerException - 如果证书为null
      自:
      1.5
    • getRevokedCertificates

      public abstract Set<? extends X509CRLEntry> getRevokedCertificates()
      获取此CRL中的所有条目。返回一组X509CRLEntry对象。
      返回:
      所有条目,如果不存在则返回null。
      参见:
    • getTBSCertList

      public abstract byte[] getTBSCertList() throws CRLException
      获取此CRL的DER编码的CRL信息,即来自此CRL的tbsCertList。可用于独立验证签名。
      返回:
      DER编码的CRL信息。
      抛出:
      CRLException - 如果发生编码错误。
    • getSignature

      public abstract byte[] getSignature()
      从CRL中获取signature值(原始签名位)。其ASN.1定义如下:
       signature     BIT STRING
       
      返回:
      签名。
    • getSigAlgName

      public abstract String getSigAlgName()
      获取CRL签名算法的签名算法名称。例如字符串为"SHA256withRSA"。其ASN.1定义如下:
       signatureAlgorithm   AlgorithmIdentifier
      
       AlgorithmIdentifier  ::=  SEQUENCE  {
           algorithm               OBJECT IDENTIFIER,
           parameters              ANY DEFINED BY algorithm OPTIONAL  }
                                   -- 包含与算法对象标识符值一起使用的类型的值
       

      算法名称由algorithm OID字符串确定。

      返回:
      签名算法名称。
    • getSigAlgOID

      public abstract String getSigAlgOID()
      从CRL中获取签名算法OID字符串。OID由一组用句点分隔的非负整数表示。例如,字符串"1.2.840.10040.4.3"标识了在RFC 3279: Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and CRL Profile中定义的SHA-1 with DSA签名算法。

      有关相关ASN.1定义,请参见getSigAlgName

      返回:
      签名算法OID字符串。
    • getSigAlgParams

      public abstract byte[] getSigAlgParams()
      从此CRL的签名算法中获取DER编码的签名算法参数。在大多数情况下,签名算法参数为null;参数通常与公钥一起提供。如果需要访问单个参数值,则使用AlgorithmParameters并使用getSigAlgName返回的名称进行实例化。

      有关相关ASN.1定义,请参见getSigAlgName

      返回:
      DER编码的签名算法参数,如果不存在参数则返回null。