模块 java.base

类 X509CertSelector

java.lang.Object
java.security.cert.X509CertSelector
所有已实现的接口:
Cloneable , CertSelector

public class X509CertSelector extends Object implements CertSelector
选择匹配所有指定条件的 X509CertificatesCertSelector。从 CertStore 中选择证书以构建符合 PKIX 的证书路径时,此类特别有用。

首次构造时,X509CertSelector 没有启用任何条件,并且每个 get 方法都返回一个默认值(nullgetBasicConstraints 方法的 -1)。因此,match 方法将为任何 X509Certificate 返回 true。通常,会启用多个条件(例如,通过调用 setIssuer(X500Principal) setKeyUsage ),然后将 X509CertSelector 传递给 CertStore.getCertificates 或某种类似方法。

可以启用多个条件(例如,通过调用 setIssuer(X500Principal) setSerialNumber ),这样 match 方法通常唯一匹配单个 X509Certificate 。我们说通常,因为两个颁发 CA 可能具有相同的专有名称,并且每个颁发的证书具有相同的序列号。其他独特的组合包括颁发者、主题、主题密钥标识符和/或主题公钥标准。

请参阅 RFC 5280:Internet X.509 公钥基础结构证书和 CRL 配置文件 以了解下面提到的 X.509 证书扩展的定义。

并发访问

除非另有说明,否则此类中定义的方法不是线程安全的。需要同时访问单个对象的多个线程应该在它们之间同步并提供必要的锁定。每个操作单独对象的多个线程不需要同步。

自从:
1.4
参见:
  • 构造方法详细信息

    • X509CertSelector

      public X509CertSelector()
      创建一个 X509CertSelector 。最初,没有设置任何条件,因此任何 X509Certificate 都将匹配。
  • 方法详情

    • setCertificate

      public void setCertificate(X509Certificate  cert)
      设置 certificateEquals 标准。指定的 X509Certificate 必须等于传递给 match 方法的 X509Certificate。如果是 null ,则不应用此检查。

      当需要匹配单个证书时,此方法特别有用。尽管可以结合 certificateEquals 标准指定其他标准,但这通常是不切实际或没有必要的。

      参数:
      cert - 要匹配的 X509Certificate(或 null
      参见:
    • setSerialNumber

      public void setSerialNumber(BigInteger  serial)
      设置 serialNumber 标准。指定的序列号必须与 X509Certificate 中的证书序列号匹配。如果是 null ,任何证书序列号都可以。
      参数:
      serial - 要匹配的证书序列号(或 null
      参见:
    • setIssuer

      public void setIssuer(X500Principal  issuer)
      设置发行者标准。指定的专有名称必须与 X509Certificate 中的颁发者专有名称相匹配。如果是 null ,任何发行者专有名称都可以。
      参数:
      issuer - 作为 X500Principal(或 null)的专有名称
      自从:
      1.5
    • setIssuer

      @Deprecated (since ="16") public void setIssuer(String  issuerDN) throws IOException
      已弃用。
      请改用 setIssuer(X500Principal) setIssuer(byte[]) 。不应依赖此方法,因为它可能无法匹配某些证书,因为某些专有名称的 RFC 2253 字符串形式的编码信息丢失。
      设置发行者标准。指定的专有名称必须与 X509Certificate 中的颁发者专有名称相匹配。如果是 null ,任何发行者专有名称都可以。

      如果 issuerDN 不是 null ,它应该包含一个专有名称,格式为 RFC 2253

      参数:
      issuerDN - RFC 2253 格式的专有名称(或 null
      抛出:
      IOException - 如果发生解析错误(DN 的格式不正确)
    • setIssuer

      public void setIssuer(byte[] issuerDN) throws IOException
      设置发行者标准。指定的专有名称必须与 X509Certificate 中的颁发者专有名称相匹配。如果指定了 null,则禁用发行者标准,任何发行者专有名称都可以。

      如果 issuerDN 不是 null ,它应该包含单个 DER 编码的专有名称,如 X.501 中所定义。此结构的 ASN.1 表示法如下。

      
       Name ::= CHOICE {
        RDNSequence }
      
       RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
      
       RelativeDistinguishedName ::=
        SET SIZE (1 .. MAX) OF AttributeTypeAndValue
      
       AttributeTypeAndValue ::= SEQUENCE {
        type   AttributeType,
        value  AttributeValue }
      
       AttributeType ::= OBJECT IDENTIFIER
      
       AttributeValue ::= ANY DEFINED BY AttributeType
       ....
       DirectoryString ::= CHOICE {
          teletexString      TeletexString (SIZE (1..MAX)),
          printableString     PrintableString (SIZE (1..MAX)),
          universalString     UniversalString (SIZE (1..MAX)),
          utf8String       UTF8String (SIZE (1.. MAX)),
          bmpString        BMPString (SIZE (1..MAX)) }
        

      请注意,这里指定的字节数组被克隆以防止后续修改。

      参数:
      issuerDN - 包含 ASN.1 DER 编码形式的可分辨名称的字节数组(或 null
      抛出:
      IOException - 如果发生编码错误(DN 的格式不正确)
    • setSubject

      public void setSubject(X500Principal  subject)
      设置主题标准。指定的专有名称必须与 X509Certificate 中的主题专有名称相匹配。如果是 null ,任何主题专有名称都可以。
      参数:
      subject - 作为 X500Principal(或 null)的专有名称
      自从:
      1.5
    • setSubject

      @Deprecated (since ="16") public void setSubject(String  subjectDN) throws IOException
      已弃用。
      请改用 setSubject(X500Principal) setSubject(byte[]) 。不应依赖此方法,因为它可能无法匹配某些证书,因为某些专有名称的 RFC 2253 字符串形式的编码信息丢失。
      设置主题标准。指定的专有名称必须与 X509Certificate 中的主题专有名称相匹配。如果是 null ,任何主题专有名称都可以。

      如果 subjectDN 不是 null ,它应该包含一个专有名称,格式为 RFC 2253

      参数:
      subjectDN - RFC 2253 格式的专有名称(或 null
      抛出:
      IOException - 如果发生解析错误(DN 的格式不正确)
    • setSubject

      public void setSubject(byte[] subjectDN) throws IOException
      设置主题标准。指定的专有名称必须与 X509Certificate 中的主题专有名称相匹配。如果是 null ,任何主题专有名称都可以。

      如果 subjectDN 不是 null ,它应该包含单个 DER 编码的专有名称,如 X.501 中所定义。有关此结构的 ASN.1 表示法,请参阅 setIssuer(byte[])

      参数:
      subjectDN - 包含 ASN.1 DER 格式(或 null )的可分辨名称的字节数组
      抛出:
      IOException - 如果发生编码错误(DN 的格式不正确)
    • setSubjectKeyIdentifier

      public void setSubjectKeyIdentifier(byte[] subjectKeyID)
      设置 subjectKeyIdentifier 标准。 X509Certificate 必须包含一个 SubjectKeyIdentifier 扩展,扩展的内容与指定的标准值相匹配。如果标准值为 null ,则不会进行 subjectKeyIdentifier 检查。

      如果 subjectKeyID 不是 null ,它应该包含与 SubjectKeyIdentifier 扩展的扩展值内容对应的单个 DER 编码值(不包括对象标识符、关键性设置和封装 OCTET STRING)。此结构的 ASN.1 表示法如下。

      
       SubjectKeyIdentifier ::= KeyIdentifier
      
       KeyIdentifier ::= OCTET STRING
        

      由于主题密钥标识符的格式没有被任何标准强制要求,主题密钥标识符不被 X509CertSelector 解析。相反,这些值是使用逐字节比较来比较的。

      请注意,此处提供的字节数组已被克隆以防止后续修改。

      参数:
      subjectKeyID - 主题密钥标识符(或 null
      参见:
    • setAuthorityKeyIdentifier

      public void setAuthorityKeyIdentifier(byte[] authorityKeyID)
      设置 authorityKeyIdentifier 标准。 X509Certificate 必须包含一个 AuthorityKeyIdentifier 扩展,扩展值的内容与指定的标准值相匹配。如果标准值为 null ,则不会进行 authorityKeyIdentifier 检查。

      如果 authorityKeyID 不是 null ,它应该包含与 AuthorityKeyIdentifier 扩展的扩展值内容对应的单个 DER 编码值(不包括对象标识符、关键性设置和封装 OCTET STRING)。此结构的 ASN.1 表示法如下。

      
       AuthorityKeyIdentifier ::= SEQUENCE {
        keyIdentifier       [0] KeyIdentifier      OPTIONAL,
        authorityCertIssuer    [1] GeneralNames      OPTIONAL,
        authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
      
       KeyIdentifier ::= OCTET STRING
        

      X509CertSelector 不解析权限密钥标识符。相反,这些值是使用逐字节比较来比较的。

      当填充 AuthorityKeyIdentifierkeyIdentifier 字段时,该值通常取自颁发者证书中的 SubjectKeyIdentifier 扩展名。但是请注意,颁发者证书上 X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object Identifier>) 的结果不能直接用作 setAuthorityKeyIdentifier 的输入。这是因为 SubjectKeyIdentifier 只包含一个 KeyIdentifier OCTET STRING,而不是 KeyIdentifier、GeneralNames 和 CertificateSerialNumber 的序列。为了使用颁发者证书的 SubjectKeyIdentifier 扩展的扩展值,需要提取嵌入的 KeyIdentifier OCTET STRING 的值,然后将此 OCTET STRING DER 编码在一个 SEQUENCE 中。有关 SubjectKeyIdentifier 的更多详细信息,请参阅 setSubjectKeyIdentifier(byte[] subjectKeyID)

      另请注意,此处提供的字节数组已被克隆以防止后续修改。

      参数:
      authorityKeyID - 权限密钥标识符(或 null
      参见:
    • setCertificateValid

      public void setCertificateValid(Date  certValid)
      设置 certificateValid 标准。指定的日期必须在 X509Certificate 的证书有效期内。如果是 null ,则不会进行 certificateValid 检查。

      请注意,此处提供的 Date 已被克隆以防止后续修改。

      参数:
      certValid - 要检查的 Date(或 null
      参见:
    • setPrivateKeyValid

      public void setPrivateKeyValid(Date  privateKeyValid)
      设置 privateKeyValid 标准。指定日期必须在 X509Certificate 的私钥有效期内。如果是 null ,则不会进行 privateKeyValid 检查。

      请注意,此处提供的 Date 已被克隆以防止后续修改。

      参数:
      privateKeyValid - 要检查的 Date(或 null
      参见:
    • setSubjectPublicKeyAlgID

      public void setSubjectPublicKeyAlgID(String  oid) throws IOException
      设置 subjectPublicKeyAlgID 标准。 X509Certificate 必须包含具有指定算法的主题公钥。如果是 null ,则不会进行 subjectPublicKeyAlgID 检查。
      参数:
      oid - 要检查的算法的对象标识符 (OID)(或 null)。 OID 由一组由句点分隔的非负整数表示。
      抛出:
      IOException - 如果 OID 无效,例如第一个组件不是 0、1 或 2,或者第二个组件大于 39。
      参见:
    • setSubjectPublicKey

      public void setSubjectPublicKey(PublicKey  key)
      设置 subjectPublicKey 标准。 X509Certificate 必须包含指定的主题公钥。如果是 null ,则不会进行 subjectPublicKey 检查。
      参数:
      key - 要检查的主题公钥(或 null
      参见:
    • setSubjectPublicKey

      public void setSubjectPublicKey(byte[] key) throws IOException
      设置 subjectPublicKey 标准。 X509Certificate 必须包含指定的主题公钥。如果是 null ,则不会进行 subjectPublicKey 检查。

      由于此方法允许将公钥指定为字节数组,因此它可能用于未知密钥类型。

      如果 key 不是 null ,它应该包含单个 DER 编码的 SubjectPublicKeyInfo 结构,如 X.509 中所定义。此结构的 ASN.1 表示法如下。

      
       SubjectPublicKeyInfo ::= SEQUENCE {
        algorithm      AlgorithmIdentifier,
        subjectPublicKey   BIT STRING }
      
       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
        

      请注意,此处提供的字节数组已被克隆以防止后续修改。

      参数:
      key - 包含 ASN.1 DER 形式的主题公钥的字节数组(或 null
      抛出:
      IOException - 如果发生编码错误(主题公钥的格式不正确)
      参见:
    • setKeyUsage

      public void setKeyUsage(boolean[] keyUsage)
      设置 keyUsage 标准。 X509Certificate 必须允许指定的 keyUsage 值。如果是 null ,则不会进行 keyUsage 检查。请注意,没有 keyUsage 扩展名的 X509Certificate 隐式允许所有 keyUsage 值。

      请注意,此处提供的布尔数组已被克隆以防止后续修改。

      参数:
      keyUsage - 一个布尔数组,其格式与 X509Certificate.getKeyUsage() 返回的布尔数组相同。或者 null
      参见:
    • setExtendedKeyUsage

      public void setExtendedKeyUsage(Set <String > keyPurposeSet) throws IOException
      设置 extendedKeyUsage 标准。 X509Certificate 必须在其扩展密钥使用扩展中允许指定的密钥用途。如果 keyPurposeSet 为空或 null ,则不会执行 extendedKeyUsage 检查。请注意,没有 extendedKeyUsage 扩展名的 X509Certificate 隐式允许所有密钥用途。

      请注意,Set 已被克隆以防止后续修改。

      参数:
      keyPurposeSet - 一个 Set 字符串格式的关键用途 OID(或 null )。每个 OID 由一组由句点分隔的非负整数表示。
      抛出:
      IOException - 如果 OID 无效,例如第一个组件不是 0、1 或 2,或者第二个组件大于 39。
      参见:
    • setMatchAllSubjectAltNames

      public void setMatchAllSubjectAltNames(boolean matchAllNames)
      启用/禁用匹配 setSubjectAlternativeNames addSubjectAlternativeName 方法中指定的所有 subjectAlternativeNames。如果启用,X509Certificate 必须包含所有指定的主题备用名称。如果禁用,X509Certificate 必须至少包含一个指定的主题备用名称。

      matchAllNames 标志默认为true

      参数:
      matchAllNames - 如果是 true ,则启用标志;如果是 false ,则该标志被禁用。
      参见:
    • setSubjectAlternativeNames

      public void setSubjectAlternativeNames(Collection <List <?>> names) throws IOException
      设置 subjectAlternativeNames 标准。 X509Certificate 必须包含所有或至少一个指定的 subjectAlternativeNames,具体取决于 matchAllNames 标志的值(请参阅 setMatchAllSubjectAltNames )。

      此方法允许调用者通过单个方法调用为 subjectAlternativeNames 标准指定完整的主题替代名称集。指定的值替换 subjectAlternativeNames 标准的先前值。

      names 参数(如果不是 null )是一个 Collection ,每个名称都有一个条目要包含在主题替代名称标准中。每个条目都是一个 List,其第一个条目是一个 Integer(名称类型,0-8),第二个条目是一个 String 或字节数组(名称,分别为字符串或 ASN.1 DER 编码形式)。同一类型可以有多个名称。如果提供 null 作为此参数的值,则不会执行 subjectAlternativeNames 检查。

      Collection 中的每个主题替代名称可以指定为 String 或 ASN.1 编码字节数组。有关所用格式的更多详细信息,请参阅 addSubjectAlternativeName(int type, String name) addSubjectAlternativeName(int type, byte [] name)

      Note: 对于专有名称,指定字节数组形式而不是字符串形式。有关详细信息,请参阅 addSubjectAlternativeName(int, String) 中的注释。

      请注意,names 参数可以包含重复的名称(相同的名称和名称类型),但它们可能会从 getSubjectAlternativeNames 方法返回的名称的 Collection 中删除。

      请注意,在 Collection 上执行了深层复制以防止后续修改。

      参数:
      names - 一个 Collection 的名字(或 null
      抛出:
      IOException - 如果发生解析错误
      参见:
    • addSubjectAlternativeName

      public void addSubjectAlternativeName(int type, String  name) throws IOException
      将名称添加到 subjectAlternativeNames 条件。 X509Certificate 必须包含所有或至少一个指定的 subjectAlternativeNames,具体取决于 matchAllNames 标志的值(请参阅 setMatchAllSubjectAltNames )。

      此方法允许调用者将名称添加到主题备用名称集中。指定的名称将添加到 subjectAlternativeNames 条件的任何先前值。如果指定的名称重复,则可能会被忽略。

      名称以字符串格式提供。 RFC 822、DNS 和 URI 名称对这些类型使用公认的字符串格式(受 RFC 5280 中包含的限制约束)。 IPv4 地址名称使用点分四组表示法提供。 OID 地址名称表示为一系列由句点分隔的非负整数。目录名称(专有名称)以 RFC 2253 格式提供。没有为 otherNames、X.400 名称、EDI 方名称、IPv6 地址名称或任何其他类型的名称定义标准字符串格式。它们应该使用 addSubjectAlternativeName(int type, byte [] name) 方法指定。

      Note: 对于专有名称,请改用 addSubjectAlternativeName(int, byte[])。不应依赖此方法,因为它可能无法匹配某些证书,因为某些专有名称的 RFC 2253 字符串形式的编码信息丢失。

      参数:
      type - 名称类型(0-8,如 RFC 5280 第 4.2.1.6 节中所指定)
      name - 字符串形式的名称(不是 null
      抛出:
      IOException - 如果发生解析错误
    • addSubjectAlternativeName

      public void addSubjectAlternativeName(int type, byte[] name) throws IOException
      将名称添加到 subjectAlternativeNames 条件。 X509Certificate 必须包含所有或至少一个指定的 subjectAlternativeNames,具体取决于 matchAllNames 标志的值(请参阅 setMatchAllSubjectAltNames )。

      此方法允许调用者将名称添加到主题备用名称集中。指定的名称将添加到 subjectAlternativeNames 条件的任何先前值。如果指定的名称重复,则可能会被忽略。

      该名称以字节数组的形式提供。此字节数组应包含 DER 编码名称,因为它将出现在 RFC 5280 和 X.509 中定义的 GeneralName 结构中。编码后的字节数组应该只包含名称的编码值,而不应该包含与 GeneralName 结构中的名称相关联的标记。该结构的 ASN.1 定义如下所示。

      
       GeneralName ::= CHOICE {
          otherName            [0]   OtherName,
          rfc822Name           [1]   IA5String,
          dNSName             [2]   IA5String,
          x400Address           [3]   ORAddress,
          directoryName          [4]   Name,
          ediPartyName          [5]   EDIPartyName,
          uniformResourceIdentifier    [6]   IA5String,
          iPAddress            [7]   OCTET STRING,
          registeredID          [8]   OBJECT IDENTIFIER}
        

      请注意,此处提供的字节数组已被克隆以防止后续修改。

      参数:
      type - 名称类型(0-8,如上所列)
      name - 包含 ASN.1 DER 编码形式名称的字节数组
      抛出:
      IOException - 如果发生解析错误
    • setNameConstraints

      public void setNameConstraints(byte[] bytes) throws IOException
      设置名称约束条件。 X509Certificate 必须具有满足指定名称约束的主题和主题替代名称。

      名称约束被指定为字节数组。此字节数组应包含名称约束的 DER 编码形式,因为它们将出现在 RFC 5280 和 X.509 中定义的 NameConstraints 结构中。该结构的 ASN.1 定义如下所示。

      
       NameConstraints ::= SEQUENCE {
          permittedSubtrees    [0]   GeneralSubtrees OPTIONAL,
          excludedSubtrees    [1]   GeneralSubtrees OPTIONAL }
      
       GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
      
       GeneralSubtree ::= SEQUENCE {
          base          GeneralName,
          minimum     [0]   BaseDistance DEFAULT 0,
          maximum     [1]   BaseDistance OPTIONAL }
      
       BaseDistance ::= INTEGER (0..MAX)
      
       GeneralName ::= CHOICE {
          otherName            [0]   OtherName,
          rfc822Name           [1]   IA5String,
          dNSName             [2]   IA5String,
          x400Address           [3]   ORAddress,
          directoryName          [4]   Name,
          ediPartyName          [5]   EDIPartyName,
          uniformResourceIdentifier    [6]   IA5String,
          iPAddress            [7]   OCTET STRING,
          registeredID          [8]   OBJECT IDENTIFIER}
        

      请注意,此处提供的字节数组已被克隆以防止后续修改。

      参数:
      bytes - 包含用于检查名称约束的 NameConstraints 扩展的 ASN.1 DER 编码的字节数组。仅包括扩展的值,不包括 OID 或关键性标志。可以是 null ,在这种情况下将不执行名称约束检查。
      抛出:
      IOException - 如果发生解析错误
      参见:
    • setBasicConstraints

      public void setBasicConstraints(int minMaxPathLen)
      设置基本约束约束。如果该值大于或等于零,X509Certificates 必须包含一个 basicConstraints 扩展,其 pathLen 至少为该值。如果值为 -2,则仅接受最终实体证书。如果值为 -1,则不进行检查。

      此约束在构建向前(从目标到信任锚)的证书路径时很有用。如果已构建部分路径,则任何候选证书的 maxPathLen 值必须大于或等于部分路径中的证书数量。

      参数:
      minMaxPathLen - 基本约束约束的值
      抛出:
      IllegalArgumentException - 如果该值小于 -2
      参见:
    • setPolicy

      public void setPolicy(Set <String > certPolicySet) throws IOException
      设置策略约束。 X509Certificate 必须在其证书策略扩展中至少包含一个指定的策略。如果 certPolicySet 为空,则 X509Certificate 必须在其证书策略扩展中至少包含一些指定的策略。如果 certPolicySetnull ,则不会执行任何策略检查。

      请注意,Set 已被克隆以防止后续修改。

      参数:
      certPolicySet - 字符串格式的证书策略 OID 的 Set(或 null)。每个 OID 由一组由句点分隔的非负整数表示。
      抛出:
      IOException - 如果 OID 发生解析错误,例如第一个组件不是 0、1 或 2,或者第二个组件大于 39。
      参见:
    • setPathToNames

      public void setPathToNames(Collection <List <?>> names) throws IOException
      设置 pathToNames 标准。 X509Certificate 不得包含禁止构建指定名称路径的名称约束。

      此方法允许调用者通过单个方法调用指定 X509Certificates 的名称约束必须允许的完整名称集。指定的值替换 pathToNames 标准的先前值。

      此约束在构建正向认证路径(从目标到信任锚)时很有用。如果构建了部分路径,则任何候选证书不得包含名称约束,否则会禁止构建通向部分路径中任何名称的路径.

      names 参数(如果不是 null )是一个 Collection ,每个名称都有一个条目要包含在 pathToNames 标准中。每个条目都是一个 List,其第一个条目是一个 Integer(名称类型,0-8),第二个条目是一个 String 或字节数组(名称,分别为字符串或 ASN.1 DER 编码形式)。同一类型可以有多个名称。如果提供 null 作为此参数的值,则不会执行 pathToNames 检查。

      Collection 中的每个名称都可以指定为 String 或 ASN.1 编码字节数组。有关所用格式的更多详细信息,请参阅 addPathToName(int type, String name) addPathToName(int type, byte [] name)

      Note: 对于专有名称,指定字节数组形式而不是字符串形式。有关详细信息,请参阅 addPathToName(int, String) 中的注释。

      请注意,names 参数可以包含重复的名称(相同的名称和名称类型),但它们可能会从 getPathToNames 方法返回的名称的 Collection 中删除。

      请注意,在 Collection 上执行了深层复制以防止后续修改。

      参数:
      names - 一个 Collection 每个名称一个条目(或 null
      抛出:
      IOException - 如果发生解析错误
      参见:
    • addPathToName

      public void addPathToName(int type, String  name) throws IOException
      将名称添加到 pathToNames 条件。 X509Certificate 不得包含禁止构建指定名称路径的名称约束。

      此方法允许调用者将名称添加到 X509Certificates 的名称约束必须允许的名称集中。指定的名称将添加到 pathToNames 条件的任何先前值。如果名称重复,则可能会被忽略。

      名称以字符串格式提供。 RFC 822、DNS 和 URI 名称对这些类型使用公认的字符串格式(受 RFC 5280 中包含的限制约束)。 IPv4 地址名称使用点分四组表示法提供。 OID 地址名称表示为一系列由句点分隔的非负整数。目录名称(专有名称)以 RFC 2253 格式提供。没有为 otherNames、X.400 名称、EDI 方名称、IPv6 地址名称或任何其他类型的名称定义标准字符串格式。它们应该使用 addPathToName(int type, byte [] name) 方法指定。

      Note: 对于专有名称,请改用 addPathToName(int, byte[])。不应依赖此方法,因为它可能无法匹配某些证书,因为某些专有名称的 RFC 2253 字符串形式的编码信息丢失。

      参数:
      type - 名称类型(0-8,如 RFC 5280 第 4.2.1.6 节中所指定)
      name - 字符串形式的名称
      抛出:
      IOException - 如果发生解析错误
    • addPathToName

      public void addPathToName(int type, byte[] name) throws IOException
      将名称添加到 pathToNames 条件。 X509Certificate 不得包含禁止构建指定名称路径的名称约束。

      此方法允许调用者将名称添加到 X509Certificates 的名称约束必须允许的名称集中。指定的名称将添加到 pathToNames 条件的任何先前值。如果名称重复,则可能会被忽略。

      该名称以字节数组的形式提供。此字节数组应包含 DER 编码名称,因为它将出现在 RFC 5280 和 X.509 中定义的 GeneralName 结构中。此结构的 ASN.1 定义出现在 addSubjectAlternativeName(int type, byte [] name) 的文档中。

      请注意,此处提供的字节数组已被克隆以防止后续修改。

      参数:
      type - 名称类型(0-8,如 RFC 5280 第 4.2.1.6 节中所指定)
      name - 包含 ASN.1 DER 编码形式名称的字节数组
      抛出:
      IOException - 如果发生解析错误
    • getCertificate

      public X509Certificate  getCertificate()
      返回 certificateEquals 标准。指定的 X509Certificate 必须等于传递给 match 方法的 X509Certificate。如果是 null ,则不应用此检查。
      返回:
      X509Certificate 匹配(或 null
      参见:
    • getSerialNumber

      public BigInteger  getSerialNumber()
      返回 serialNumber 标准。指定的序列号必须与 X509Certificate 中的证书序列号匹配。如果是 null ,任何证书序列号都可以。
      返回:
      要匹配的证书序列号(或 null
      参见:
    • getIssuer

      public X500Principal  getIssuer()
      将发行者标准作为 X500Principal 返回。此专有名称必须与 X509Certificate 中的颁发者专有名称相匹配。如果 null ,发行者标准被禁用,任何发行者专有名称都可以。
      返回:
      所需的颁发者专有名称为 X500Principal(或 null
      自从:
      1.5
    • getIssuerAsString

      @Deprecated (since ="16") public String  getIssuerAsString()
      已弃用。
      请改用 getIssuer() getIssuerAsBytes() 。不应依赖此方法,因为它可能无法匹配某些证书,因为某些专有名称的 RFC 2253 字符串形式的编码信息丢失。
      将发行者标准返回为 String 。此专有名称必须与 X509Certificate 中的颁发者专有名称相匹配。如果 null ,发行者标准被禁用,任何发行者专有名称都可以。

      如果返回的值不是 null ,则它是一个专有名称,采用 RFC 2253 格式。

      返回:
      RFC 2253 格式(或 null )中所需的颁发者专有名称
    • getIssuerAsBytes

      public byte[] getIssuerAsBytes() throws IOException
      将发行者标准作为字节数组返回。此专有名称必须与 X509Certificate 中的颁发者专有名称相匹配。如果 null ,发行者标准被禁用,任何发行者专有名称都可以。

      如果返回的值不是 null ,它是一个包含单个 DER 编码专有名称的字节数组,如 X.501 中所定义。 setIssuer(byte[]) 的文档中提供了此结构的 ASN.1 表示法。

      请注意,返回的字节数组被克隆以防止后续修改。

      返回:
      包含 ASN.1 DER 格式(或 null )所需的颁发者专有名称的字节数组
      抛出:
      IOException - 如果发生编码错误
    • getSubject

      public X500Principal  getSubject()
      将主题标准作为 X500Principal 返回。此专有名称必须与 X509Certificate 中的主题专有名称相匹配。如果是 null ,主题标准被禁用,任何主题专有名称都可以。
      返回:
      所需的主题专有名称为 X500Principal(或 null
      自从:
      1.5
    • getSubjectAsString

      @Deprecated (since ="16") public String  getSubjectAsString()
      已弃用。
      请改用 getSubject() getSubjectAsBytes() 。不应依赖此方法,因为它可能无法匹配某些证书,因为某些专有名称的 RFC 2253 字符串形式的编码信息丢失。
      将主题标准作为 String 返回。此专有名称必须与 X509Certificate 中的主题专有名称相匹配。如果是 null ,主题标准被禁用,任何主题专有名称都可以。

      如果返回的值不是 null ,则它是一个专有名称,采用 RFC 2253 格式。

      返回:
      RFC 2253 格式(或 null )中所需的主题专有名称
    • getSubjectAsBytes

      public byte[] getSubjectAsBytes() throws IOException
      将主题标准作为字节数组返回。此专有名称必须与 X509Certificate 中的主题专有名称相匹配。如果是 null ,主题标准被禁用,任何主题专有名称都可以。

      如果返回的值不是 null ,它是一个包含单个 DER 编码专有名称的字节数组,如 X.501 中所定义。 setSubject(byte[]) 的文档中提供了此结构的 ASN.1 表示法。

      请注意,返回的字节数组被克隆以防止后续修改。

      返回:
      包含 ASN.1 DER 格式(或 null )中所需主题专有名称的字节数组
      抛出:
      IOException - 如果发生编码错误
    • getSubjectKeyIdentifier

      public byte[] getSubjectKeyIdentifier()
      返回 subjectKeyIdentifier 标准。 X509Certificate 必须包含具有指定值的 SubjectKeyIdentifier 扩展。如果是 null ,则不会进行 subjectKeyIdentifier 检查。

      请注意,返回的字节数组被克隆以防止后续修改。

      返回:
      密钥标识符(或 null
      参见:
    • getAuthorityKeyIdentifier

      public byte[] getAuthorityKeyIdentifier()
      返回 authorityKeyIdentifier 标准。 X509Certificate 必须包含具有指定值的 AuthorityKeyIdentifier 扩展。如果是 null ,则不会进行 authorityKeyIdentifier 检查。

      请注意,返回的字节数组被克隆以防止后续修改。

      返回:
      密钥标识符(或 null
      参见:
    • getCertificateValid

      public Date  getCertificateValid()
      返回 certificateValid 标准。指定的日期必须在 X509Certificate 的证书有效期内。如果是 null ,则不会进行 certificateValid 检查。

      请注意,返回的 Date 被克隆以防止后续修改。

      返回:
      Date 检查(或 null
      参见:
    • getPrivateKeyValid

      public Date  getPrivateKeyValid()
      返回 privateKeyValid 标准。指定日期必须在 X509Certificate 的私钥有效期内。如果是 null ,则不会进行 privateKeyValid 检查。

      请注意,返回的 Date 被克隆以防止后续修改。

      返回:
      Date 检查(或 null
      参见:
    • getSubjectPublicKeyAlgID

      public String  getSubjectPublicKeyAlgID()
      返回 subjectPublicKeyAlgID 标准。 X509Certificate 必须包含具有指定算法的主题公钥。如果是 null ,则不会进行 subjectPublicKeyAlgID 检查。
      返回:
      要检查的签名算法的对象标识符 (OID)(或 null )。 OID 由一组由句点分隔的非负整数表示。
      参见:
    • getSubjectPublicKey

      public PublicKey  getSubjectPublicKey()
      返回 subjectPublicKey 标准。 X509Certificate 必须包含指定的主题公钥。如果是 null ,则不会进行 subjectPublicKey 检查。
      返回:
      要检查的主题公钥(或 null
      参见:
    • getKeyUsage

      public boolean[] getKeyUsage()
      返回 keyUsage 标准。 X509Certificate 必须允许指定的 keyUsage 值。如果为 null,则不会进行 keyUsage 检查。

      请注意,返回的布尔数组被克隆以防止后续修改。

      返回:
      X509Certificate.getKeyUsage() 返回的布尔数组格式相同的布尔数组。或者 null
      参见:
    • getExtendedKeyUsage

      public Set <String > getExtendedKeyUsage()
      返回 extendedKeyUsage 标准。 X509Certificate 必须在其扩展密钥使用扩展中允许指定的密钥用途。如果返回的 keyPurposeSet 为空或 null ,则不会进行 extendedKeyUsage 检查。请注意,没有 extendedKeyUsage 扩展的 X509Certificate 隐式允许所有密钥用途。
      返回:
      字符串格式(或 null )的关键用途 OID 的不可变 Set
      参见:
    • getMatchAllSubjectAltNames

      public boolean getMatchAllSubjectAltNames()
      指示 X509Certificate 是否必须包含在 setSubjectAlternativeNames addSubjectAlternativeName 方法中指定的所有或至少一个 subjectAlternativeNames。如果是 true ,则 X509Certificate 必须包含所有指定的主题备用名称。如果是 false ,则 X509Certificate 必须至少包含指定的主题替代名称之一。
      返回:
      true 如果启用标志; false 如果标志被禁用。该标志默认为true
      参见:
    • getSubjectAlternativeNames

      public Collection <List <?>> getSubjectAlternativeNames()
      返回 subjectAlternativeNames 标准的副本。 X509Certificate 必须包含所有或至少一个指定的 subjectAlternativeNames,具体取决于 matchAllNames 标志的值(请参阅 getMatchAllSubjectAltNames )。如果返回的值为 null ,则不会执行 subjectAlternativeNames 检查。

      如果返回的值不是 null ,则它是一个 Collection ,每个名称都有一个条目要包含在主题备用名称标准中。每个条目都是一个 List,其第一个条目是一个 Integer(名称类型,0-8),第二个条目是一个 String 或字节数组(名称,分别为字符串或 ASN.1 DER 编码形式)。同一类型可以有多个名称。请注意,返回的 Collection 可能包含重复名称(相同的名称和名称类型)。

      Collection 中的每个主题替代名称可以指定为 String 或 ASN.1 编码字节数组。有关所用格式的更多详细信息,请参阅 addSubjectAlternativeName(int type, String name) addSubjectAlternativeName(int type, byte [] name)

      请注意,在 Collection 上执行了深层复制以防止后续修改。

      返回:
      一个 Collection 的名字(或 null
      参见:
    • getNameConstraints

      public byte[] getNameConstraints()
      返回名称约束标准。 X509Certificate 必须具有满足指定名称约束的主题和主题替代名称。

      名称约束作为字节数组返回。此字节数组包含名称约束的 DER 编码形式,因为它们将出现在 RFC 5280 和 X.509 中定义的 NameConstraints 结构中。 setNameConstraints(byte [] bytes) 的文档中提供了此结构的 ASN.1 表示法。

      请注意,返回的字节数组被克隆以防止后续修改。

      返回:
      包含用于检查名称约束的 NameConstraints 扩展的 ASN.1 DER 编码的字节数组。 null 如果不执行名称约束检查。
      参见:
    • getBasicConstraints

      public int getBasicConstraints()
      返回基本约束约束。如果该值大于或等于零,X509Certificates 必须包含一个 basicConstraints 扩展,其 pathLen 至少为该值。如果值为 -2,则仅接受最终实体证书。如果值为 -1,则不执行 basicConstraints 检查。
      返回:
      基本约束约束的值
      参见:
    • getPolicy

      public Set <String > getPolicy()
      返回策略标准。 X509Certificate 必须在其证书策略扩展中至少包含一个指定的策略。如果返回的 Set 为空,则 X509Certificate 必须在其证书策略扩展中至少包含一些指定的策略。如果返回的 Setnull ,则不会执行任何策略检查。
      返回:
      字符串格式(或 null )的证书策略 OID 的不可变 Set
      参见:
    • getPathToNames

      public Collection <List <?>> getPathToNames()
      返回 pathToNames 条件的副本。 X509Certificate 不得包含禁止构建指定名称路径的名称约束。如果返回的值为 null ,则不会执行 pathToNames 检查。

      如果返回的值不是 null ,则它是一个 Collection,每个名称都有一个条目包含在 pathToNames 标准中。每个条目都是一个 List,其第一个条目是一个 Integer(名称类型,0-8),第二个条目是一个 String 或字节数组(名称,分别为字符串或 ASN.1 DER 编码形式)。同一类型可以有多个名称。请注意,返回的 Collection 可能包含重复名称(相同的名称和名称类型)。

      Collection 中的每个名称都可以指定为 String 或 ASN.1 编码字节数组。有关所用格式的更多详细信息,请参阅 addPathToName(int type, String name) addPathToName(int type, byte [] name)

      请注意,在 Collection 上执行了深层复制以防止后续修改。

      返回:
      一个 Collection 的名字(或 null
      参见:
    • toString

      public String  toString()
      返回 CertSelector 的可打印表示。
      重写:
      toString 在类 Object
      返回:
      String 描述了 CertSelector 的内容
    • match

      public boolean match(Certificate  cert)
      决定是否应选择 Certificate
      指定者:
      match 在接口 CertSelector
      参数:
      cert - 要检查的 Certificate
      返回:
      true 如果应选择 Certificatefalse 否则
    • clone

      public Object  clone()
      返回此对象的副本。
      指定者:
      clone 在接口 CertSelector
      重写:
      clone 在类 Object
      返回:
      副本
      参见: