- java.lang.Object
-
- java.security.cert.X509CertSelector
-
- 实现的所有接口
-
Cloneable
,CertSelector
public class X509CertSelectorextends Objectimplements CertSelector
一个CertSelector
,它选择符合所有指定条件的X509Certificates
。 从CertStore
选择证书以构建符合PKIX的证书路径时,此类特别有用。首次构建时,
X509CertSelector
未启用任何条件,并且每个get
方法都返回默认值(null
,或-1
用于getBasicConstraints
方法)。 因此,match
方法将返回true
任何X509Certificate
。 通常,启用几个条件(例如,通过调用setIssuer
或setKeyUsage
),然后将X509CertSelector
传递给CertStore.getCertificates
或某些类似的方法。可以启用多个条件(例如,通过调用
setIssuer
和setSerialNumber
),使得match
方法通常唯一匹配单个X509Certificate
。 我们通常说,因为两个颁发CA可能具有相同的可分辨名称,并且每个颁发具有相同序列号的证书。 其他独特的组合包括issuer,subject,subjectKeyIdentifier和/或subjectPublicKey标准。有关下面提到的X.509证书扩展的定义,请参阅RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile 。
并发访问
除非另有说明,否则此类中定义的方法不是线程安全的。 需要同时访问单个对象的多个线程应在它们之间进行同步并提供必要的锁定。 每个操作单独对象的多个线程不需要同步。
- 从以下版本开始:
- 1.4
- 另请参见:
-
CertSelector
,X509Certificate
-
-
构造方法摘要
构造方法 构造器 描述 X509CertSelector()
创建一个X509CertSelector
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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()
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()
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)
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)
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
的可打印表示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
中的证书序列号匹配。 如果是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
中的主题专有名称匹配。 如果是null
,任何主题专有名称都可以。- 参数
-
subject
- 尊敬的名字null
(或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
,则不会执行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
不解析授权密钥标识符。 相反,使用逐字节比较来比较值。当填充
AuthorityKeyIdentifier
的keyIdentifier
字段时,该值通常取自颁发者证书中的SubjectKeyIdentifier
扩展名。 但请注意,发行人证书上X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object Identifier>)
的结果不能直接用作setAuthorityKeyIdentifier
的输入。 这是因为SubjectKeyIdentifier仅包含KeyIdentifier OCTET STRING,而不包含KeyIdentifier,GeneralNames和CertificateSerialNumber的SEQUENCE。 为了使用发行者证书的扩展值SubjectKeyIdentifier
扩展,有必要提取嵌入式KeyIdentifier
OCTET STRING的值,然后在SEQUENCE中对该OCTET STRING进行DER编码。 有关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
,则不会执行extendedKeyUsage检查。 请注意,没有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)
。注意:对于专有名称,请指定字节数组形式而不是String形式。 有关更多信息,请参阅
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
必须包含一个basicConstraints扩展,其pathLen至少为此值。 如果值为-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)
。注意:对于专有名称,请指定字节数组形式而不是String形式。 有关详细信息,请参阅
addPathToName(int, String)
中的注释。请注意,
names
参数可以包含重复的名称(相同的名称和名称类型),但可以从4319485480771方法返回的Collection
中删除它们。请注意,在
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
,则不应用此检查。- 结果
-
X509Certificate
匹配(或null
) - 另请参见:
-
setCertificate(java.security.cert.X509Certificate)
-
getSerialNumber
public BigInteger getSerialNumber()
返回serialNumber标准。 指定的序列号必须与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
,则不会执行authorityKeyIdentifier检查。请注意,克隆返回的字节数组以防止后续修改。
- 结果
- 密钥标识符(或
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值。 如果为null,则不会执行keyUsage检查。请注意,克隆返回的布尔数组以防止后续修改。
- 结果
- 一个布尔数组,格式与
X509Certificate.getKeyUsage()
返回的布尔数组相同 。 或null
。 - 另请参见:
-
setKeyUsage(boolean[])
-
getExtendedKeyUsage
public Set<String> getExtendedKeyUsage()
返回extendedKeyUsage标准。X509Certificate
必须在其扩展密钥用法扩展中允许指定的密钥用途。 如果返回的keyPurposeSet
为空或null
,则不会执行extendedKeyUsage检查。 请注意,没有extendedKeyUsage扩展的X509Certificate
隐式允许所有关键用途。- 结果
- 一个不可变的
Set
字符串格式的关键目的OID(或null
) - 另请参见:
-
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
必须包含basicConstraints扩展,其pathLen至少为此值。 如果值为-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
上执行深层复制以防止后续修改。- 结果
- a
Collection
(或null
) - 另请参见:
-
setPathToNames(java.util.Collection<java.util.List<?>>)
-
toString
public String toString()
返回CertSelector
的可打印表示CertSelector
。
-
match
public boolean match(Certificate cert)
决定是否应选择Certificate
。- Specified by:
-
match
in interfaceCertSelector
- 参数
-
cert
- 要检查的Certificate
- 结果
-
true
如果Certificate
应选择,false
否则
-
-