Module  java.base
软件包  java.security.cert

Class X509CRL

  • All Implemented Interfaces:
    X509Extension


    public abstract class X509CRL
    extends CRL
    implements X509Extension

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

    每个撤销的证书都由其证书序列号在CRL中标识。 当证书使用系统使用证书(例如,用于验证远程用户的数字签名)时,该系统不仅可以检查证书签名和有效性,还可以获取适当最近的CRL,并检查证书序列号是否不在CRL。 “适当近期”的含义可能随当地政策而有所不同,但通常意味着最近发布的CRL。 CA定期定期发布新的CRL(例如,每小时,每天或每周)。 作为撤销,条目将添加到CRL中,并且在达到证书到期日期时可能会删除条目。

    下面在ASN.1中介绍X.509 v2 CRL格式:

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

    更多信息,请参见RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile

    tbsCertList的ASN.1定义是:

      TBSCertList  ::=  SEQUENCE  {
         version                 Version OPTIONAL,
                                 -- if present, must be v2
         signature               AlgorithmIdentifier,
         issuer                  Name,
         thisUpdate              ChoiceOfTime,
         nextUpdate              ChoiceOfTime OPTIONAL,
         revokedCertificates     SEQUENCE OF SEQUENCE  {
             userCertificate         CertificateSerialNumber,
             revocationDate          ChoiceOfTime,
             crlEntryExtensions      Extensions OPTIONAL
                                     -- if present, must be v2
             }  OPTIONAL,
         crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
                                      -- if present, must be 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
    另请参见:
    CRLCertificateFactoryX509Extension
    • 构造方法详细信息

      • X509CRL

        protected X509CRL​()
        X.509 CRL的构造方法。
    • 方法详细信息

      • equals

        public boolean equals​(Object other)
        将此CRL与给定对象进行比较。 如果other对象是instanceof X509CRL ,则其编码形式被检索并与该CRL的编码形式进行比较。
        重写:
        equalsObject
        参数
        other - 测试与此CRL相等的对象。
        结果
        如果两个CRL的编码形式匹配,则为true,否则为false。
        另请参见:
        Object.hashCode()HashMap
      • getEncoded

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

        public void verify​(PublicKey key,
                           Provider sigProvider)
                    throws CRLException,
                           NoSuchAlgorithmException,
                           InvalidKeyException,
                           SignatureException
        验证此CRL是否使用与给定公钥对应的私钥进行签名。 此方法使用给定提供商提供的签名验证引擎。 请注意,指定的Provider对象不必在提供者列表中注册。 该方法被添加到Java Platform Standard Edition的1.8版本。 为了保持与现有服务提供商的向后兼容性,此方法不是abstract ,它提供了默认的实现。
        参数
        key - 用于执行验证的PublicKey。
        sigProvider - 签名提供者。
        异常
        NoSuchAlgorithmException - 不支持的签名算法。
        InvalidKeyException - 键错误。
        SignatureException - 签名错误。
        CRLException - 编码错误。
        从以下版本开始:
        1.8
      • getVersion

        public abstract int getVersion​()
        从CRL获取version (版本号)值。 ASN.1的定义是:
          version    Version OPTIONAL,
                     -- if present, must be v2
        
         Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
                     -- v3 does not apply to CRLs but appears for consistency
                     -- with definition of Version for certs 
        结果
        版本号,即1或2。
      • getIssuerDN

        public abstract Principal getIssuerDN​()
        诋毁 ,取而代之的是getIssuerX500Principal() 该方法返回issuer作为实现特定的Principal对象,不应该由便携式代码依赖。

        从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 ; 一般来说将会是一个directoryString directoryString通常之一PrintableStringTeletexStringUniversalString
        结果
        一位姓名为发行人名称的校长。
      • getIssuerX500Principal

        public X500Principal getIssuerX500Principal​()
        从CRL返回发行人(发行人可分辨名称)值作为X500Principal

        建议子类覆盖此方法。

        结果
        代表发行人的名称为 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)
        获取给定证书serialNumber的CRL条目(如果有)。
        参数
        serialNumber - 要查找CRL条目的证书的序列号
        结果
        具有给定序列号的条目,如果此CRL中不存在此类条目,则为null。
        另请参见:
        X509CRLEntry
      • getRevokedCertificate

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

        此方法可用于查找间接CRL中的CRL条目,这意味着CRL包含CRL颁发者以外的发行人的条目。 默认实现只会返回由CRL颁发者颁发的证书的条目。 希望支持间接CRL的子类应该覆盖此方法。

        参数
        certificate - 要查找CRL条目的证书
        结果
        给定证书的条目,如果此CRL中不存在此类条目,则为null。
        异常
        NullPointerException - 如果证书为空
        从以下版本开始:
        1.5
      • getRevokedCertificates

        public abstract Set<? extends X509CRLEntry> getRevokedCertificates​()
        获取此CRL中的所有条目。 这将返回一组X509CRLEntry对象。
        结果
        所有条目,如果没有,则为null。
        另请参见:
        X509CRLEntry
      • getTBSCertList

        public abstract byte[] getTBSCertList​()
                                       throws CRLException
        获取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  }
                                     -- contains a value of the type
                                     -- registered for use with the
                                     -- algorithm object identifier value 

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

        结果
        签名算法名称。
      • getSigAlgParams

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

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

        结果
        DER编码的签名算法参数,如果没有参数,则为null。