Module java.base

Class X509CertSelector

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

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

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

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

请参考RFC 5280: 互联网X.509公钥基础设施证书和CRL配置文件以获取下面提到的X.509证书扩展的定义。

并发访问

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

自:
1.4
参见:
  • Constructor Details

    • X509CertSelector

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

    • 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
      Deprecated.
      Use setIssuer(X500Principal) or setIssuer(byte[]) instead. This method should not be relied on as it can fail to match some certificates because of a loss of encoding information in the RFC 2253 String form of some distinguished names.
      设置颁发者条件。指定的可分辨名称必须与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表示如下。

      
       名称 ::= 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
      自JDK版本:
      1.5
    • setSubject

      @Deprecated(since="16") public void setSubject(String subjectDN) throws IOException
      Deprecated.
      Use setSubject(X500Principal) or setSubject(byte[]) instead. This method should not be relied on as it can fail to match some certificates because of a loss of encoding information in the RFC 2253 String form of some distinguished names.
      设置主题准则。指定的专有名称必须与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)
      设置主体密钥标识准则。必须包含X509Certificate的SubjectKeyIdentifier扩展,其内容与指定的准则值匹配。如果准则值为null,将不进行主体密钥标识检查。

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

      
       SubjectKeyIdentifier ::= KeyIdentifier
      
       KeyIdentifier ::= OCTET STRING
       

      由于主体密钥标识的格式未受任何标准规定,因此X509CertSelector不会解析主体密钥标识。相反,将使用逐字节比较值。

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

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

      public void setAuthorityKeyIdentifier(byte[] authorityKeyID)
      设置授权密钥标识准则。必须包含X509Certificate的AuthorityKeyIdentifier扩展,其内容与指定的准则值匹配。如果准则值为null,将不进行授权密钥标识检查。

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

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

      X509CertSelector不会解析授权密钥标识。相反,将使用逐字节比较值。

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

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

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

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

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

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

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

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

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

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

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

      public void setSubjectPublicKey(byte[] key) throws IOException
      设置主体公钥准则。必须包含X509Certificate具有指定主体公钥。如果null,将不进行主体公钥检查。

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

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

      public void setMatchAllSubjectAltNames(boolean matchAllNames)
      启用/禁用匹配在setSubjectAlternativeNamesaddSubjectAlternativeName方法中指定的所有subjectAlternativeNames。如果启用,则X509Certificate必须包含所有指定的subject alternative names。如果禁用,则X509Certificate必须包含指定的至少一个subject alternative name。

      matchAllNames标志默认为true

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

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

      此方法允许调用者通过单个方法调用指定subjectAlternativeNames标准的完整集合。指定的值将替换subjectAlternativeNames标准的先前值。

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

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

      注意: 对于可分辨名称,请指定字节数组形式,而不是字符串形式。有关更多信息,请参见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)。

      此方法允许调用者向subject alternative names集合添加一个名称。指定的名称将添加到subjectAlternativeNames标准的任何先前值中。如果指定的名称是重复的,则可能会被忽略。

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

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

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

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

      此方法允许调用者向subject alternative names集合添加一个名称。指定的名称将添加到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必须包含具有至少此值的pathLen的basicConstraints扩展。如果值为-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)

      注意:对于专有名称,请使用字节数组形式而不是字符串形式。有关更多信息,请参阅addPathToName(int, String)中的注释。

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

      请注意,对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 party名称、IPv6地址名称或任何其他类型的名称)没有定义标准字符串格式。它们应使用addPathToName(int type, byte [] name)方法指定。

      注意:对于专有名称,请使用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()
      返回证书相等标准。指定的X509Certificate必须等于传递给match方法的X509Certificate。如果为null,则不应用此检查。
      返回:
      要匹配的X509Certificate(或null
      参见:
    • getSerialNumber

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

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

      @Deprecated(since="16") public String getIssuerAsString()
      Deprecated.
      Use getIssuer() or getIssuerAsBytes() instead. This method should not be relied on as it can fail to match some certificates because of a loss of encoding information in the RFC 2253 String form of some distinguished names.
      返回颁发者标准作为String。此专有名称必须与X509Certificate中的颁发者专有名称匹配。如果为null,则禁用颁发者标准,任何颁发者专有名称都可以。

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

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

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

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

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

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

      public X500Principal getSubject()
      返回主题准则作为X500Principal。此专有名称必须与X509Certificate中的主题专有名称匹配。如果为null,则主题准则已禁用,任何主题专有名称均可。
      返回:
      作为X500Principal的所需主题专有名称(或null
      自:
      1.5
    • getSubjectAsString

      @Deprecated(since="16") public String getSubjectAsString()
      Deprecated.
      Use getSubject() or getSubjectAsBytes() instead. This method should not be relied on as it can fail to match some certificates because of a loss of encoding information in the RFC 2253 String form of some distinguished names.
      返回主题准则作为String。此专有名称必须与X509Certificate中的主题专有名称匹配。如果为null,则主题准则已禁用,任何主题专有名称均可。

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

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

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

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

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

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

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

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

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

      public byte[] getAuthorityKeyIdentifier()
      返回authorityKeyIdentifier准则。必须包含具有指定值的AuthorityKeyIdentifier扩展的X509Certificate。如果为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检查。请注意,没有扩展密钥用途扩展的X509Certificate隐含允许所有密钥用途。
      返回:
      以字符串格式表示的密钥用途OID的不可变Set(或null
      参见:
    • getMatchAllSubjectAltNames

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

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

      如果返回的值不为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结构中所示。有关此结构的ASN.1表示法,请参阅setNameConstraints(byte [] bytes)的文档。

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

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

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

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

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

      如果返回的值不为null,则它是一个Collection,每个名称都包含在路径名称准则中。每个条目都是一个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
      返回:
      描述CertSelector内容的String
    • match

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

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