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

Class X509CertSelector

  • All Implemented Interfaces:
    CloneableCertSelector


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

    当第一次构造中, X509CertSelector启用没有标准,并且每个所述get方法返回默认值( null ,或-1getBasicConstraints方法)。 因此, match方法将返回true任何X509Certificate 通常,启用了几个条件(例如通过调用setIssuersetKeyUsage ),然后将X509CertSelector传递给CertStore.getCertificates或一些类似的方法。

    可以启用几个标准(例如,通过调用setIssuersetSerialNumber ),使得match方法通常唯一匹配单个X509Certificate 我们通常说,因为两个发行CA可能具有相同的可分辨名称,并且每个发出具有相同序列号的证书。 其他独特组合包括发行人,主题,subjectKeyIdentifier和/或subjectPublicKey标准。

    有关下列X.509证书扩展的定义,请参阅RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile

    并发访问

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

    从以下版本开始:
    1.4
    另请参见:
    CertSelectorX509Certificate
    • 构造方法详细信息

      • X509CertSelector

        public X509CertSelector​()
        创建一个X509CertSelector 最初,没有任何标准设置,所以任何X509Certificate将匹配。
    • 方法详细信息

      • setCertificate

        public void setCertificate​(X509Certificate cert)
        设置certificateEquals标准。 指定的X509Certificate必须等于X509Certificate传递给match方法。 如果是null ,那么这个检查是不适用的。

        当需要匹配单个证书时,此方法特别有用。 虽然可以与certificateEquals标准一起指定其他标准,但通常不实际或必要。

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

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

        public void setIssuer​(X500Principal issuer)
        设定发行人标准。 指定的可分辨名称必须与X509Certificate中的发行人可分辨名称相匹配。 如果是null ,任何发行人的辨别名都可以。
        参数
        issuer - 专有名称为 null (或 null
        从以下版本开始:
        1.5
      • setIssuer

        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中的主题识别名称相X509Certificate 如果是null ,任何主题的专有名称都会做。
        参数
        subject - 作为 subject的专有名称(或 null
        从以下版本开始:
        1.5
      • setSubject

        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 [] issuerDN)

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

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

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

           SubjectKeyIdentifier ::= KeyIdentifier KeyIdentifier ::= OCTET STRING  

        由于主题标识符的格式不受任何标准的约束,因此主题标识符不会被X509CertSelector解析。 相反,使用逐字节比较来比较值。

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

        参数
        subjectKeyID - 主题标识符(或 null
        另请参见:
        getSubjectKeyIdentifier()
      • setAuthorityKeyIdentifier

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

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

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

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

        keyIdentifier领域AuthorityKeyIdentifier填充,该值通常取自SubjectKeyIdentifier延长发行人的证书中。 但是,请注意,发行人证书上的X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object Identifier>)的结果可能不能直接用作setAuthorityKeyIdentifier的输入。 这是因为SubjectKeyIdentifier只包含一个KeyIdentifier OCTET STRING,而不包含KeyIdentifier,GeneralNames和CertificateSerialNumber的SEQUENCE。 为了使用发卡行证书的SubjectKeyIdentifier扩展名的扩展值,必须提取嵌入式KeyIdentifier OCTET STRING的值,然后将该OCTET STRING的编码为SEQUENCE。 有关SubjectKeyIdentifier的更多详细信息,请参阅setSubjectKeyIdentifier(byte[] subjectKeyID)

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

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

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

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

        参数
        certValid - 要查询的 Date (或 null
        另请参见:
        getCertificateValid()
      • setPrivateKeyValid

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

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

        参数
        privateKeyValid - 要查询的 Date (或 null
        另请参见:
        getPrivateKeyValid()
      • setSubjectPublicKeyAlgID

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

        public void setSubjectPublicKey​(PublicKey key)
        设置subjectPublicKey标准。 X509Certificate必须包含指定的主题公钥。 如果是null ,则不会对subjectPublicKey进行检查。
        参数
        key - 要查询的主题公钥(或 null
        另请参见:
        getSubjectPublicKey()
      • 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 - 如果发生编码错误(主题公钥的表单不正确)
        另请参见:
        getSubjectPublicKey()
      • setKeyUsage

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

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

        参数
        keyUsage - 与X509Certificate.getKeyUsage()返回的布尔数组相同格式的布尔数组。 null
        另请参见:
        getKeyUsage()
      • setExtendedKeyUsage

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

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

        参数
        keyPurposeSet - 一个Set的字符串格式的主要目的OID(或null )。 每个OID由一组以句点分隔的非负整数表示。
        异常
        IOException - 如果OID无效,例如第一个组件不是0,1或2或第二个组件大于39。
        另请参见:
        getExtendedKeyUsage()
      • setMatchAllSubjectAltNames

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

        matchAllNames标志默认为true

        参数
        matchAllNames - 如果是true ,则启用该标志; 如果是false ,则该标志被禁用。
        另请参见:
        getMatchAllSubjectAltNames()
      • 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)

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

        需要注意的是names参数可以包含重复的名称(相同的名称和名称类型),但他们可以从被删除Collection由返回的名字getSubjectAlternativeNames方法。

        请注意,在Collection上执行深度拷贝以防止后续修改。

        参数
        names - 一个 Collection的名字(或 null
        异常
        IOException - 如果发生解析错误
        另请参见:
        getSubjectAlternativeNames()
      • 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格式提供。 没有为其他名称,X.400名称,EDI方名称,IPv6地址名称或任何其他类型的名称定义标准字符串格式。 应使用addSubjectAlternativeName(int type, byte [] name)方法指定。

        注意:对于可分辨名称,请改用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 - 如果发生解析错误
        另请参见:
        getNameConstraints()
      • setBasicConstraints

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

        当建立认证路径(从目标到信任锚点)建立认证路径时,此约束是有用的。如果构建了部分路径,任何候选证书的maxPathLen值必须大于或等于部分路径中的证书数量。

        参数
        minMaxPathLen - 基本约束约束的值
        异常
        IllegalArgumentException - 如果值小于-2
        另请参见:
        getBasicConstraints()
      • setPolicy

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

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

        参数
        certPolicySet - 一个Set的字符串格式的证书策略OID(或null )。 每个OID由一组以句点分隔的非负整数表示。
        异常
        IOException - 如果OID上发生解析错误,例如第一个组件不是0,1或2或第二个组件大于39。
        另请参见:
        getPolicy()
      • 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参数可以包含重复的名称(相同的名称和名称类型),但他们可以从被删除Collection由返回的名字getPathToNames方法。

        请注意,对Collection执行深度拷贝以防止后续修改。

        参数
        names - 一个 Collection ,每个名称有一个条目(或 null
        异常
        IOException - 如果发生解析错误
        另请参见:
        getPathToNames()
      • addPathToName

        public void addPathToName​(int type,
                                  String name)
                           throws IOException
        在pathToNames条件中添加一个名称。 X509Certificate不能包含禁止构建指定名称路径的名称约束。

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

        该名称以字符串格式提供。 RFC 822,DNS和URI名称对于这些类型使用完善的字符串格式(受到RFC 5280中的限制)。 IPv4地址名称使用虚线四边形符号提供。 OID地址名称表示为以句点分隔的一系列非负整数。 目录名称(专有名称)以RFC 2253格式提供。 没有为其他名称,X.400名称,EDI方名称,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 - 如果发生解析错误
      • getSerialNumber

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

        public X500Principal getIssuer​()
        作为X500Principal返回发行人标准。 该名称必须与X509Certificate中的发行人可分辨名称相匹配。 如果是null ,发行人标准被禁用,任何发行人的辨别名都可以。
        结果
        所需发行人的识别名称为 null (或 null
        从以下版本开始:
        1.5
      • getIssuerAsString

        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中所定义。 该结构的ASN.1符号在setIssuer(byte [] issuerDN)的文档中提供。

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

        结果
        包含ASN.1 DER格式(或 null )中所需颁发者可分辨名称的字节数组
        异常
        IOException - 如果发生编码错误
      • getSubject

        public X500Principal getSubject​()
        返回主题标准为X500Principal 该专有名称必须与X509Certificate中的主题识别名称相匹配。 如果null ,主题标准被禁用,任何主题辨别名称都可以。
        结果
        所需主题识别名称为 null (或 null
        从以下版本开始:
        1.5
      • getSubjectAsString

        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中所定义。 该结构的ASN.1符号在setSubject(byte [] subjectDN)的文档中提供。

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

        结果
        包含ASN.1 DER格式(或 null )中所需主题标识名的字节数组
        异常
        IOException - 如果发生编码错误
      • getSubjectKeyIdentifier

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

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

        结果
        密钥标识符(或 null
        另请参见:
        setSubjectKeyIdentifier(byte[])
      • getAuthorityKeyIdentifier

        public byte[] getAuthorityKeyIdentifier​()
        返回authorityKeyIdentifier标准。 X509Certificate必须包含具有指定值的AuthorityKeyIdentifier扩展。 如果是null ,那么没有权限的null检查就会完成。

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

        结果
        密钥标识符(或 null
        另请参见:
        setAuthorityKeyIdentifier(byte[])
      • getCertificateValid

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

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

        结果
        Date检查(或 null
        另请参见:
        setCertificateValid(java.util.Date)
      • getPrivateKeyValid

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

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

        结果
        Date检查(或 null
        另请参见:
        setPrivateKeyValid(java.util.Date)
      • getSubjectPublicKeyAlgID

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

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

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

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

        结果
        一个与X509Certificate.getKeyUsage()返回的布尔数组相同格式的布尔数组。 null
        另请参见:
        setKeyUsage(boolean[])
      • getExtendedKeyUsage

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

        public boolean getMatchAllSubjectAltNames​()
        指示X509Certificate必须包含setSubjectAlternativeNamesaddSubjectAlternativeName方法中指定的所有或至少一个subjectAlternativeNames 如果是true ,那么X509Certificate必须包含所有指定的主题替代名称。 如果是false ,那么X509Certificate必须包含至少一个指定的主题替代名称。
        结果
        true如果标志被使能; 如果标志被禁用, false 标志默认为true
        另请参见:
        setMatchAllSubjectAltNames(boolean)
      • 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
        另请参见:
        setSubjectAlternativeNames(java.util.Collection<java.util.List<?>>)
      • getNameConstraints

        public byte[] getNameConstraints​()
        返回名称约束条件。 X509Certificate必须具有符合指定名称限制的主题和主题备用名称。

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

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

        结果
        一个包含用于检查名称约束的NameConstraints扩展的ASN.1 DER编码的字节数组。 null如果不执行名称约束检查。
        另请参见:
        setNameConstraints(byte[])
      • getBasicConstraints

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

        public Set<String> getPolicy​()
        返回策略标准。 X509Certificate必须在其证书策略扩展中至少包括一个指定的策略。 如果返回的Set为空,那么X509Certificate必须在其证书策略扩展中至少包含一些指定的策略。 如果Set返回的是null ,则不进行任何策略检查。
        结果
        一个不可变的 Set证书策略OID字符串格式(或 null
        另请参见:
        setPolicy(java.util.Set<java.lang.String>)
      • 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
        另请参见:
        setPathToNames(java.util.Collection<java.util.List<?>>)
      • toString

        public String toString​()
        返回 CertSelector的可打印的表示。
        重写:
        toStringObject
        结果
        一个描述 String的内容的 CertSelector
      • match

        public boolean match​(Certificate cert)
        决定是否选择 Certificate
        Specified by:
        match在接口 CertSelector
        参数
        cert - 要检查的 Certificate
        结果
        true如果 Certificate应选择, false否则