- java.lang.Object
-
- java.security.cert.X509CertSelector
-
- All Implemented Interfaces:
-
Cloneable
,CertSelector
public class X509CertSelector extends Object implements CertSelector
ACertSelector
,选择符合所有指定条件的X509Certificates
。 当从CertStore
选择证书以构建符合PKIX的认证路径时,此类特别有用。当第一次构造中,
X509CertSelector
启用没有标准,并且每个所述get
方法返回默认值(null
,或-1
为getBasicConstraints
方法)。 因此,match
方法将返回true
任何X509Certificate
。 通常,启用了几个条件(例如通过调用setIssuer
或setKeyUsage
),然后将X509CertSelector
传递给CertStore.getCertificates
或一些类似的方法。可以启用几个标准(例如,通过调用
setIssuer
和setSerialNumber
),使得match
方法通常唯一匹配单个X509Certificate
。 我们通常说,因为两个发行CA可能具有相同的可分辨名称,并且每个发出具有相同序列号的证书。 其他独特组合包括发行人,主题,subjectKeyIdentifier和/或subjectPublicKey标准。有关下列X.509证书扩展的定义,请参阅RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile 。
并发访问
除非另有说明,否则此类中定义的方法不是线程安全的。 需要同时访问单个对象的多个线程应在其间同步并提供必要的锁定。 每个操作单独对象的多个线程不需要同步。
- 从以下版本开始:
- 1.4
- 另请参见:
-
CertSelector
,X509Certificate
-
-
构造方法摘要
构造方法 Constructor 描述 X509CertSelector()
创建一个X509CertSelector
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
addPathToName(int type, byte[] name)
在pathToNames条件中添加一个名称。void
addPathToName(int type, String name)
在pathToNames条件中添加一个名称。void
addSubjectAlternativeName(int type, byte[] name)
在subjectAlternativeNames条件中添加一个名称。void
addSubjectAlternativeName(int type, String name)
在subjectAlternativeNames条件中添加一个名称。Object
clone()
返回此对象的副本。byte[]
getAuthorityKeyIdentifier()
返回authorityKeyIdentifier标准。int
getBasicConstraints()
返回基本约束约束。X509Certificate
getCertificate()
返回certificateEquals标准。Date
getCertificateValid()
返回certificateValid条件。Set<String>
getExtendedKeyUsage()
返回extendedKeyUsage标准。X500Principal
getIssuer()
作为X500Principal
返回发行人标准。byte[]
getIssuerAsBytes()
作为字节数组返回发行方标准。String
getIssuerAsString()
诋毁 ,使用 getIssuer()或者 getIssuerAsBytes()代替。boolean[]
getKeyUsage()
返回keyUsage标准。boolean
getMatchAllSubjectAltNames()
指示X509Certificate
必须包含setSubjectAlternativeNames
或addSubjectAlternativeName
方法中指定的所有或至少一个 subjectAlternativeNames 。byte[]
getNameConstraints()
返回名称约束条件。Collection<List<?>>
getPathToNames()
返回pathToNames条件的副本。Set<String>
getPolicy()
返回策略标准。Date
getPrivateKeyValid()
返回privateKeyValid条件。BigInteger
getSerialNumber()
返回serialNumber标准。X500Principal
getSubject()
返回主题标准为X500Principal
。Collection<List<?>>
getSubjectAlternativeNames()
返回subjectAlternativeNames条件的副本。byte[]
getSubjectAsBytes()
以字节数组形式返回主题标准。String
getSubjectAsString()
诋毁 ,使用 getSubject()或者 getSubjectAsBytes()代替。byte[]
getSubjectKeyIdentifier()
返回subjectKeyIdentifier标准。PublicKey
getSubjectPublicKey()
返回subjectPublicKey标准。String
getSubjectPublicKeyAlgID()
返回subjectPublicKeyAlgID条件。boolean
match(Certificate cert)
决定是否选择Certificate
。void
setAuthorityKeyIdentifier(byte[] authorityKeyID)
设置authorityKeyIdentifier标准。void
setBasicConstraints(int minMaxPathLen)
设置基本约束约束。void
setCertificate(X509Certificate cert)
设置certificateEquals标准。void
setCertificateValid(Date certValid)
设置certificateValid标准。void
setExtendedKeyUsage(Set<String> keyPurposeSet)
设置extendedKeyUsage标准。void
setIssuer(byte[] issuerDN)
设定发行人标准。void
setIssuer(String issuerDN)
诋毁 ,使用 setIssuer(X500Principal)或者 setIssuer(byte[])代替。void
setIssuer(X500Principal issuer)
设定发行人标准。void
setKeyUsage(boolean[] keyUsage)
设置keyUsage标准。void
setMatchAllSubjectAltNames(boolean matchAllNames)
void
setNameConstraints(byte[] bytes)
设置名称约束条件。void
setPathToNames(Collection<List<?>> names)
设置pathToNames条件。void
setPolicy(Set<String> certPolicySet)
设置策略约束。void
setPrivateKeyValid(Date privateKeyValid)
设置privateKeyValid条件。void
setSerialNumber(BigInteger serial)
设置serialNumber标准。void
setSubject(byte[] subjectDN)
设置主题标准。void
setSubject(String subjectDN)
诋毁 ,使用 setSubject(X500Principal)或者 setSubject(byte[])代替。void
setSubject(X500Principal subject)
设置主题标准。void
setSubjectAlternativeNames(Collection<List<?>> names)
设置subjectAlternativeNames标准。void
setSubjectKeyIdentifier(byte[] subjectKeyID)
设置subjectKeyIdentifier标准。void
setSubjectPublicKey(byte[] key)
设置subjectPublicKey标准。void
setSubjectPublicKey(PublicKey key)
设置subjectPublicKey标准。void
setSubjectPublicKeyAlgID(String oid)
设置subjectPublicKeyAlgID标准。String
toString()
返回CertSelector
的可打印表示。
-
-
-
方法详细信息
-
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扩展名,扩展名的内容与指定的标准值匹配。 如果标准值为null
,null
不会执行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)
启用/禁用匹配setSubjectAlternativeNames
或addSubjectAlternativeName
方法中指定的所有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
必须在证书策略扩展中至少包含一些指定的策略。 如果certPolicySet
为null
,则不进行任何策略检查。请注意,
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
- 如果发生解析错误
-
getCertificate
public X509Certificate getCertificate()
返回certificateEquals标准。 指定的X509Certificate
必须等于X509Certificate
传递给match
方法。 如果是null
,null
此检查。- 结果
-
匹配的
X509Certificate
(或null
) - 另请参见:
-
setCertificate(java.security.cert.X509Certificate)
-
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
必须包含setSubjectAlternativeNames
或addSubjectAlternativeName
方法中指定的所有或至少一个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
的可打印的表示。
-
match
public boolean match(Certificate cert)
决定是否选择Certificate
。- Specified by:
-
match
在接口CertSelector
- 参数
-
cert
- 要检查的Certificate
- 结果
-
true
如果Certificate
应选择,false
否则
-
-