public class X509CertSelector extends Object implements CertSelector
CertSelector
,其选择X509Certificates
匹配所有指定标准。
当从CertStore中选择CertStore
以构建符合PKIX的认证路径时,此类特别有用。
当第一次构造中, X509CertSelector
启用没有标准,并且每个所述get
方法返回默认值( null
,或-1
为getBasicConstraints
方法)。 因此, match
方法将返回true
任何X509Certificate
。 通常,启用了几个条件(例如通过调用setIssuer
或setKeyUsage
),然后将X509CertSelector
传递给CertStore.getCertificates
或一些类似的方法。
可以启用几个标准(例如,通过调用setIssuer
和setSerialNumber
),使得match
方法通常唯一匹配单个X509Certificate
。 我们通常说,因为两个发行CA可能具有相同的可分辨名称,并且每个发出具有相同序列号的证书。 其他独特组合包括发行人,主题,subjectKeyIdentifier和/或subjectPublicKey标准。
请参考RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile为下面提到的X.509证书扩展的定义。
并发访问
除非另有说明,否则此类中定义的方法不是线程安全的。 需要同时访问单个对象的多个线程应在其间同步并提供必要的锁定。 每个操作单独对象的多个线程不需要同步。
CertSelector
, X509Certificate
Constructor and Description |
---|
X509CertSelector()
创建一个
X509CertSelector 。
|
Modifier and Type | Method and Description |
---|---|
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 返回发行人
X500Principal 。
|
byte[] |
getIssuerAsBytes()
作为字节数组返回发行方标准。
|
String |
getIssuerAsString()
诋毁 ,使用
getIssuer()或
getIssuerAsBytes()代替。
|
boolean[] |
getKeyUsage()
返回keyUsage标准。
|
boolean |
getMatchAllSubjectAltNames()
指示是否
X509Certificate 必须包含在指定的subjectAlternativeNames全部或至少一个
setSubjectAlternativeNames 种或
addSubjectAlternativeName 方法。
|
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的可
CertSelector 。
|
public X509CertSelector()
X509CertSelector
。
最初,没有设置任何标准,所以任何X509Certificate
将匹配。
public void setCertificate(X509Certificate cert)
X509Certificate
必须等于X509Certificate
传递给match
方法。
如果null
,则不会应用此检查。
当需要匹配单个证书时,此方法特别有用。 虽然可以与certificateEquals标准一起指定其他标准,但通常不实际或必要。
cert
- 要匹配的
X509Certificate
(或
null
)
getCertificate()
public void setSerialNumber(BigInteger serial)
X509Certificate
。
如果null
,任何证书序列号都可以。
serial
- 要匹配的证书序列号(或
null
)
getSerialNumber()
public void setIssuer(X500Principal issuer)
X509Certificate
。
如果null
,任何发行人的名称都可以。
issuer
- 专有名称为X500Principal(或
null
)
public void setIssuer(String issuerDN) throws IOException
设定发行人标准。 指定的专有名称必须与区分名发行人符合X509Certificate
。 如果null
,任何发行人的可分辨名称都可以。
如果issuerDN
不是null
,它应该包含一个可分辨的名称,以RFC 2253格式。
issuerDN
- RFC 2253格式的专有名称(或
null
)
IOException
- 如果发生解析错误(DN的表单不正确)
public void setIssuer(byte[] issuerDN) throws IOException
X509Certificate
。
如果null
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格式不正确)
public void setSubject(X500Principal subject)
X509Certificate
。
如果null
,任何主题的专有名称都会做。
subject
- 专有名称为X500Principal(或
null
)
public void setSubject(String subjectDN) throws IOException
设置主题标准。 指定的专有名称必须与主体标识名匹配X509Certificate
。 如果null
,任何主题的专有名称都会做。
如果subjectDN
不是null
,它应该包含一个可分辨的名称,以RFC 2253格式。
subjectDN
- RFC 2253格式的专有名称(或
null
)
IOException
- 如果发生解析错误(DN的表单不正确)
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格式不正确)
public void setSubjectKeyIdentifier(byte[] subjectKeyID)
X509Certificate
必须包含一个SubjectKeyIdentifier扩展名,扩展名的内容与指定的标准值匹配。
如果标准值为null
,则不会对subjectKeyIdentifier进行检查。
如果subjectKeyID
不是null
,它应该包含与SubjectKeyIdentifier扩展名的扩展值(不包括对象标识符,临界性设置和封装OCTET STRING)的内容相对应的单个DER编码值。 以下是ASN.1符号。
SubjectKeyIdentifier ::= KeyIdentifier KeyIdentifier ::= OCTET STRING
由于主题标识符的格式不受任何标准的约束,主题标识符不会被X509CertSelector
解析。 相反,使用逐字节比较来比较值。
请注意,此处提供的字节数组被克隆以防止后续修改。
subjectKeyID
- 主题标识符(或
null
)
getSubjectKeyIdentifier()
public void setAuthorityKeyIdentifier(byte[] authorityKeyID)
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不解析权限关键X509CertSelector
。 相反,使用逐字节比较来比较值。
当keyIdentifier
领域AuthorityKeyIdentifier
填充,该值通常取自SubjectKeyIdentifier
延长发行人的证书中。 但是,请注意,发行人X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object Identifier>)
上的X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object Identifier>)的结果可能不会直接用作setAuthorityKeyIdentifier
的输入。 这是因为SubjectKeyIdentifier只包含一个KeyIdentifier OCTET STRING,而不包含KeyIdentifier,GeneralNames和CertificateSerialNumber的SEQUENCE。 为了使用发行人证书的扩展值SubjectKeyIdentifier SubjectKeyIdentifier
名,必须提取嵌入式的KeyIdentifier
OCTET STRING的值,然后在SEQUENCE内DER对该OCTET STRING进行编码。 有关SubjectKeyIdentifier的更多详细信息,请参阅setSubjectKeyIdentifier(byte[] subjectKeyID)
。
还要注意,此处提供的字节数组被克隆以防止后续修改。
authorityKeyID
- 权限密钥标识符(或
null
)
getAuthorityKeyIdentifier()
public void setCertificateValid(Date certValid)
X509Certificate
。
如果null
,则不会对certificateValid进行检查。
请注意, Date
提供的Date
是克隆的,以防止后续修改。
certValid
- 要查询的
Date
(或
null
)
getCertificateValid()
public void setPrivateKeyValid(Date privateKeyValid)
X509Certificate
。
如果null
,则不进行privateKeyValid检查。
请注意, Date
提供的Date
被克隆以防止后续修改。
privateKeyValid
- 要查询的
Date
(或
null
)
getPrivateKeyValid()
public void setSubjectPublicKeyAlgID(String oid) throws IOException
X509Certificate
必须包含具有指定算法的主题公钥。
如果null
,则不会对subjectPublicKeyAlgID进行检查。
oid
- 要检查的算法的对象标识符(OID)(或null
)。
OID由以句点分隔的一组非负整数表示。
IOException
- 如果OID无效,例如第一个组件不是0,1或2或第二个组件大于39。
getSubjectPublicKeyAlgID()
public void setSubjectPublicKey(PublicKey key)
X509Certificate
必须包含指定的主题公钥。
如果null
,没有subjectPublicKey检查将完成。
key
- 要查询的主题公钥(或
null
)
getSubjectPublicKey()
public void setSubjectPublicKey(byte[] key) throws IOException
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()
public void setKeyUsage(boolean[] keyUsage)
X509Certificate
必须允许指定的keyUsage值。
如果null
,则无需使用keyUsage检查。
请注意, X509Certificate
不具有的keyUsage扩展隐含允许所有的keyUsage值。
请注意,此处提供的布尔数组被克隆以防止后续修改。
keyUsage
-在相同的格式由返回的布尔数组布尔矩阵X509Certificate.getKeyUsage()
。
或null
。
getKeyUsage()
public void setExtendedKeyUsage(Set<String> keyPurposeSet) throws IOException
X509Certificate
必须在扩展密钥使用扩展中允许指定的密钥用途。
如果keyPurposeSet
为空或null
,则不会对extendedKeyUsage进行检查。
请注意, X509Certificate
,没有extendedKeyUsage扩展隐式地允许所有主要的目的。
请注意, Set
被克隆以防止后续修改。
keyPurposeSet
- 一个Set
的字符串格式的主要目的OID(或null
)。
每个OID由一组以句点分隔的非负整数表示。
IOException
- 如果OID无效,例如第一个组件不是0,1或2或第二个组件大于39。
getExtendedKeyUsage()
public void setMatchAllSubjectAltNames(boolean matchAllNames)
setSubjectAlternativeNames
或addSubjectAlternativeName
方法中指定的所有subjectAlternativeNames匹配。
如果启用, X509Certificate
必须包含所有指定的主题替代名称。
如果禁用, X509Certificate
必须至少包含一个指定的主题替代名称。
matchAllNames标志默认为true
。
matchAllNames
- 如果true
,该标志被使能;
如果false
,该标志被禁用。
getMatchAllSubjectAltNames()
public void setSubjectAlternativeNames(Collection<List<?>> names) throws IOException
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
- a
Collection
的名称(或
null
)
IOException
- 如果发生解析错误
getSubjectAlternativeNames()
public void addSubjectAlternativeName(int type, String name) throws IOException
X509Certificate
必须包含所有或至少一个指定的subjectAlternativeNames,具体取决于matchAllNames标志的值(参见setMatchAllSubjectAltNames
)。
此方法允许调用者向一组主题替代名称添加一个名称。 指定的名称将添加到subjectAlternativeNames条件的任何先前值。 如果指定的名称是重复的,则可能会被忽略。
该名称以字符串格式提供。 RFC 822 ,DNS和URI名称使用这些类型的完善的字符串格式(受RFC 3280中包含的限制)。 IPv4地址名称使用虚线四边形符号提供。 OID地址名称表示为以句点分隔的一系列非负整数。 目录名称(专有名称)以RFC 2253格式提供。 没有为其他名称,X.400名称,EDI方名称,IPv6地址名称或任何其他类型的名称定义标准字符串格式。 应使用addSubjectAlternativeName(int type, byte [] name)
方法指定 。
注意:对于专有名称,请改用addSubjectAlternativeName(int, byte[]) 。 不应该依赖此方法,因为由于某些特定名称的RFC 2253字符串形式的编码信息丢失,因此可能无法匹配某些证书。
type
- 名称类型(0-8,如RFC 3280第4.2.1.7节中所述)
name
- 字符串形式的名称(不是
null
)
IOException
- 如果发生解析错误
public void addSubjectAlternativeName(int type, byte[] name) throws IOException
X509Certificate
必须包含所有或至少一个指定的subjectAlternativeNames,具体取决于matchAllNames标志的值(参见setMatchAllSubjectAltNames
)。
此方法允许调用者向一组主题替代名称添加一个名称。 指定的名称将添加到subjectAlternativeNames条件的任何先前值。 如果指定的名称是重复的,则可能会被忽略。
该名称作为字节数组提供。 该字节数组应包含DER编码的名称,因为它将出现在RFC 3280和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
- 如果发生解析错误
public void setNameConstraints(byte[] bytes) throws IOException
X509Certificate
必须具有满足指定名称限制的主题和主题备用名称。
名称约束被指定为字节数组。 该字节数组应包含名称约束的DER编码形式,因为它们将出现在RFC 3280和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()
public void setBasicConstraints(int minMaxPathLen)
X509Certificates
必须包含一个至少为此值的pathLen的basicConstraints扩展。
如果值为-2,则只接受终端实体证书。
如果值为-1,则不进行检查。
当建立认证路径(从目标到信任锚点)建立认证路径时,此约束是有用的。如果构建了部分路径,任何候选证书的maxPathLen值必须大于或等于部分路径中的证书数量。
minMaxPathLen
- 基本约束约束的值
IllegalArgumentException
- 如果值小于-2
getBasicConstraints()
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()
public void setPathToNames(Collection<List<?>> names) throws IOException
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()
public void addPathToName(int type, String name) throws IOException
X509Certificate
不能包含禁止构建指定名称的路径的名称约束。
此方法允许调用者在X509Certificates
的名称约束必须允许的名称集中添加一个名称。 指定的名称将添加到pathToNames条件的任何先前值。 如果名称重复,则可能会被忽略。
该名称以字符串格式提供。 RFC 822,DNS和URI名称对于这些类型使用完善的字符串格式(受RFC 3280中包含的限制)。 IPv4地址名称使用虚线四边形符号提供。 OID地址名称表示为以句点分隔的一系列非负整数。 目录名称(专有名称)以RFC 2253格式提供。 没有为其他名称,X.400名称,EDI方名称,IPv6地址名称或任何其他类型的名称定义标准字符串格式。 应使用addPathToName(int type, byte [] name)
方法指定 。
注意:对于专有名称,请改用addPathToName(int, byte[]) 。 不应该依赖此方法,因为由于某些特定名称的RFC 2253字符串形式的编码信息丢失,因此可能无法匹配某些证书。
type
- 名称类型(0-8,如RFC 3280,第4.2.1.7节中所述)
name
- 字符串形式的名称
IOException
- 如果发生解析错误
public void addPathToName(int type, byte[] name) throws IOException
X509Certificate
不能包含禁止构建指定名称的路径的名称约束。
该方法允许调用者在X509Certificates
的名称约束必须允许的名称集中添加一个名称。 指定的名称将添加到pathToNames条件的任何先前值。 如果名称重复,则可能会被忽略。
该名称作为字节数组提供。 该字节数组应包含DER编码的名称,因为它将出现在RFC 3280和X.509中定义的GeneralName结构中。 该结构的ASN.1定义出现在addSubjectAlternativeName(int type, byte [] name)
的文档中 。
请注意,此处提供的字节数组被克隆以防止后续修改。
type
- 名称类型(0-8,如RFC 3280第4.2.1.7节中所规定)
name
- 包含ASN.1 DER编码形式的名称的字节数组
IOException
- 如果发生解析错误
public X509Certificate getCertificate()
X509Certificate
必须等于X509Certificate
传递给match
方法。
如果null
,此检查不适用。
X509Certificate
匹配(或
null
)
setCertificate(java.security.cert.X509Certificate)
public BigInteger getSerialNumber()
X509Certificate
。
如果null
,任何证书序列号都可以。
null
)
setSerialNumber(java.math.BigInteger)
public X500Principal getIssuer()
X500Principal
返回发行人X500Principal
。
此标识名必须在标识名发行人符合X509Certificate
。
如果null
,发行人标准被禁用,任何发行人的可分辨名称都可以。
null
)
public String getIssuerAsString()
作为String
返回发行人String
。 此标识名必须在标识名发行人符合X509Certificate
。 如果null
,发行人标准被禁用,任何发行人的可分辨名称都可以。
如果返回的值不是null
,那么它是一种专有名称,以RFC 2253格式。
null
)所需的发行人可分辨名称
public byte[] getIssuerAsBytes() throws IOException
X509Certificate
。
如果null
,发行人标准被禁用,任何发行人的可分辨名称都可以。
如果返回的值不是null
,则它是一个包含单个DER编码的可分辨名称的字节数组,如X.501中所定义。 此结构的ASN.1表示的文档中被提供为setIssuer(byte [] issuerDN)
。
请注意,返回的字节数组被克隆以防止后续修改。
null
)中所需的发行人可分辨名称的字节数组
IOException
- 如果发生编码错误
public X500Principal getSubject()
X500Principal
。
此标识名必须与主体标识名匹配X509Certificate
。
如果null
,主题标准被禁用,并且任何主题可分辨名称都可以。
null
)
public String getSubjectAsString()
返回主题标准为String
。 此标识名必须与主体标识名匹配X509Certificate
。 如果null
,主题标准被禁用,任何主题可分辨名称将会做。
如果返回的值不是null
,则它是一种可分辨的名称,格式为RFC 2253格式。
null
)所需的主题标识名称
public byte[] getSubjectAsBytes() throws IOException
X509Certificate
。
如果null
,主题标准被禁用,并且任何主题可分辨名称都可以。
如果返回的值不是null
,则它是一个包含单个DER编码的可分辨名称的字节数组,如X.501中所定义。 此结构的ASN.1表示的文档中被提供为setSubject(byte [] subjectDN)
。
请注意,返回的字节数组被克隆以防止后续修改。
null
)所需主题可分辨名称的字节数组
IOException
- 如果发生编码错误
public byte[] getSubjectKeyIdentifier()
X509Certificate
必须包含具有指定值的SubjectKeyIdentifier扩展。
如果null
,则不会对subjectKeyIdentifier进行检查。
请注意,返回的字节数组被克隆以防止后续修改。
null
)
setSubjectKeyIdentifier(byte[])
public byte[] getAuthorityKeyIdentifier()
X509Certificate
必须包含具有指定值的AuthorityKeyIdentifier扩展。
如果null
,没有权限的KeyIdentifier检查将被完成。
请注意,返回的字节数组被克隆以防止后续修改。
null
)
setAuthorityKeyIdentifier(byte[])
public Date getCertificateValid()
X509Certificate
。
如果null
,则不会对certificateValid进行检查。
请注意,返回的Date
被克隆以防止后续修改。
Date
检查(或
null
)
setCertificateValid(java.util.Date)
public Date getPrivateKeyValid()
X509Certificate
。
如果null
,则不会进行privateKeyValid检查。
请注意,返回的Date
被克隆以防止后续修改。
Date
检查(或
null
)
setPrivateKeyValid(java.util.Date)
public String getSubjectPublicKeyAlgID()
X509Certificate
必须包含具有指定算法的主题公钥。
如果null
,则不会对subjectPublicKeyAlgID进行检查。
null
)。
OID由以句点分隔的一组非负整数表示。
setSubjectPublicKeyAlgID(java.lang.String)
public PublicKey getSubjectPublicKey()
X509Certificate
必须包含指定的主题公钥。
如果null
,则不会对subjectPublicKey进行检查。
null
)
setSubjectPublicKey(java.security.PublicKey)
public boolean[] getKeyUsage()
X509Certificate
必须允许指定的keyUsage值。
如果为空,则不进行keyUsage检查。
请注意,返回的布尔数组被克隆以防止后续修改。
X509Certificate.getKeyUsage()
返回的布尔数组相同的格式。
或null
。
setKeyUsage(boolean[])
public Set<String> getExtendedKeyUsage()
X509Certificate
必须在扩展密钥使用扩展中允许指定的密钥用途。
如果keyPurposeSet
返回的是空的,或者是null
,则没有extendedKeyUsage检查将被完成。
请注意, X509Certificate
,没有extendedKeyUsage扩展隐式地允许所有主要的目的。
Set
以字符串格式关键目的的OID(或
null
)
setExtendedKeyUsage(java.util.Set<java.lang.String>)
public boolean getMatchAllSubjectAltNames()
X509Certificate
必须包含在指定的subjectAlternativeNames全部或至少一个setSubjectAlternativeNames
种或addSubjectAlternativeName
方法。
如果true
,该X509Certificate
必须包含所有指定的主题替换名称。
如果false
,该X509Certificate
必须包含指定的主题备用名称中的至少一个。
true
如果标志被使能;
false
如果标志被禁用。
该标志默认为true
。
setMatchAllSubjectAltNames(boolean)
public Collection<List<?>> getSubjectAlternativeNames()
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<?>>)
public byte[] getNameConstraints()
X509Certificate
必须具有符合指定名称限制的主题和主题备用名称。
名称约束作为字节数组返回。 该字节数组包含名称约束的DER编码形式,因为它们将出现在RFC 3280和X.509中定义的NameConstraints结构中。 此结构的ASN.1表示的文档中被提供为setNameConstraints(byte [] bytes)
。
请注意,返回的字节数组被克隆以防止后续修改。
null
如果不执行名称约束检查。
setNameConstraints(byte[])
public int getBasicConstraints()
X509Certificates
必须包含一个至少为此值的pathLen的basicConstraints扩展。
如果值为-2,则只接受终端实体证书。
如果值为-1,则不会执行basicConstraints检查。
setBasicConstraints(int)
public Set<String> getPolicy()
X509Certificate
必须在其证书策略扩展中至少包含一个指定的策略。
如果返回的Set
为空,那么X509Certificate
必须在其证书策略扩展中至少包含一些指定的策略。
如果Set
返回的是null
,则不进行任何策略检查。
Set
字符串格式的证书策略OID(或
null
)
setPolicy(java.util.Set<java.lang.String>)
public Collection<List<?>> getPathToNames()
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<?>>)
public String toString()
CertSelector
。
public boolean match(Certificate cert)
Certificate
。
match
在界面
CertSelector
cert
- 要检查的
Certificate
true
如果
Certificate
应该被选择,
false
false