JavaTM Platform
Standard Ed. 6

java.security.cert
类 X509CertSelector

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

public class X509CertSelector
extends Object
implements CertSelector

选择与所有指定标准匹配的 X509CertificatesCertSelector。从 CertStore 中选择证书以构建一个符合 PKIX 的证书路径时,此类特别有用。

最初构造 X509CertSelector 时,它没有启用任何标准,并且每个 get 方法都返回一个默认值(null,对于 getBasicConstraints 方法,则返回 -1)。因此,对于任意 X509Certificate 而言,match 方法都将返回 true。通常,启用多种标准(例如通过调用 setIssuersetKeyUsage),然后将 X509CertSelector 传递到 CertStore.getCertificates 或某个类似方法。

可以启用多种标准(例如通过调用 setIssuersetSerialNumber),这样通常 match 方法会唯一地匹配单个 X509Certificate。我们在此说“通常”,是因为两个发布证书的 CA 可能具有相同的标识名,并且这两个 CA 发布了具有相同序列号的证书。其他独特的组合包含 issuer、subject、subjectKeyIdentifier 和/或 subjectPublicKey 标准。

有关下面所述各个 X.509 证书扩展的定义,请参阅 RFC 2459。

并发访问

除非另行指定,否则此类中所定义的方法不是线程安全的。需要并发访问单个对象的多个线程应该在它们之间实现同步并提供所需的锁定。对于每个线程都操作一个不同对象的多个线程而言,无需实现同步。

从以下版本开始:
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()
          返回 BasicConstraints 限制。
 X509Certificate getCertificate()
          返回 certificateEquals 标准。
 Date getCertificateValid()
          返回 certificateValid 标准。
 Set<String> getExtendedKeyUsage()
          返回 extendedKeyUsage 标准。
 X500Principal getIssuer()
          以 X500Principal 的形式返回 issuer 标准。
 byte[] getIssuerAsBytes()
          返回以 byte 数组表示的 issuer 标准。
 String getIssuerAsString()
          已过时,使用 getIssuer()getIssuerAsBytes() 替代。
 boolean[] getKeyUsage()
          返回 keyUsage 标准。
 boolean getMatchAllSubjectAltNames()
          指示 X509Certificate 是否必须包含 setSubjectAlternativeNamesaddSubjectAlternativeName 方法中所指定的所有或至少某个 subjectAlternativeNames。
 byte[] getNameConstraints()
          返回 NameConstraints 标准。
 Collection<List<?>> getPathToNames()
          返回 pathToNames 标准的一个副本。
 Set<String> getPolicy()
          返回策略标准。
 Date getPrivateKeyValid()
          返回 privateKeyValid 标准。
 BigInteger getSerialNumber()
          返回 serialNumber 标准。
 X500Principal getSubject()
          以 X500Principal 的形式返回 subject 标准。
 Collection<List<?>> getSubjectAlternativeNames()
          返回 subjectAlternativeNames 标准的一个副本。
 byte[] getSubjectAsBytes()
          以 byte 数组的形式返回 subject 标准。
 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)
          设置 basicConstraints 限制。
 void setCertificate(X509Certificate cert)
          设置 certificateEquals 标准。
 void setCertificateValid(Date certValid)
          设置 certificateValid 标准。
 void setExtendedKeyUsage(Set<String> keyPurposeSet)
          设置 extendedKeyUsage 标准。
 void setIssuer(byte[] issuerDN)
          设置 issuer 标准。
 void setIssuer(String issuerDN)
          已过时,使用 setIssuer(X500Principal)setIssuer(byte[]) 替代。
 void setIssuer(X500Principal issuer)
          设置 issuer 标准。
 void setKeyUsage(boolean[] keyUsage)
          设置 keyUsage 标准。
 void setMatchAllSubjectAltNames(boolean matchAllNames)
          允许/禁止匹配 setSubjectAlternativeNamesaddSubjectAlternativeName 方法中所指定的所有 subjectAlternativeNames。
 void setNameConstraints(byte[] bytes)
          设置 NameConstraints 标准。
 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)
          设置 subject 标准。
 void setSubject(String subjectDN)
          已过时,使用 setSubject(X500Principal)setSubject(byte[]) 替代。
 void setSubject(X500Principal subject)
          设置 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 的可打印表示形式。
 
从类 java.lang.Object 继承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

X509CertSelector

public X509CertSelector()
创建一个 X509CertSelector。最初未设置任何标准,所以任何 X509Certificate 都匹配。

方法详细信息

setCertificate

public void setCertificate(X509Certificate cert)
设置 certificateEquals 标准。指定的 X509Certificate 必须等于传入到 match 方法的 X509Certificate。如果它为 null,则不进行此项检查。

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

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

setSerialNumber

public void setSerialNumber(BigInteger serial)
设置 serialNumber 标准。指定的 serialNumber 必须与 X509Certificate 中的证书 serialNumber 匹配。如果该 serialNumber 为 null,则与任何证书 serialNumber 匹配都可以。

参数:
serial - 要匹配的证书 serialNumber(或者为 null
另请参见:
getSerialNumber()

setIssuer

public void setIssuer(X500Principal issuer)
设置 issuer 标准。指定的标识名必须与 X509Certificate 中的发布方标识名匹配。如果该发布方标识名为 null,则与任何发布方 标识名匹配都可以。

参数:
issuer - X500Principal 形式的标识名(或者为 null
从以下版本开始:
1.5

setIssuer

public void setIssuer(String issuerDN)
               throws IOException
已过时,使用 setIssuer(X500Principal)setIssuer(byte[]) 替代。由于某些 RFC 2253 String 形式的标识名中会丢失编码信息,所以当此方法与某些证书不匹配时不应该依赖它。

设置 issuer 标准。指定的标识名必须与 X509Certificate 中的发布方标识名匹配。如果该发布方标识名为 null,则与任何发布方标识名匹配都可以。

如果 issuerDN 不为 null,则应该包含一个 RFC 2253 格式的标识名。

参数:
issuerDN - RFC 2253 格式的标识名(或者为 null
抛出:
IOException - 如果出现解析错误(错误的 DN 形式)

setIssuer

public void setIssuer(byte[] issuerDN)
               throws IOException
设置 issuer 标准。指定的标识名必须与 X509Certificate 中的发布方标识名匹配。如果指定了 null,则禁用 issuer 标准,且与任何发布方标识名匹配都可以。

如果 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)) }
 

注意,要复制此处指定的 byte 数组以防后续修改。

参数:
issuerDN - 一个 byte 数组,包含 ASN.1 DER 编码形式的标识名(或者为 null
抛出:
IOException - 如果出现编码错误(错误的 DN 形式)

setSubject

public void setSubject(X500Principal subject)
设置 subject 标准。指定的标识名必须与 X509Certificate 中的主体标识名匹配。如果该主体标识名为 null,则与任何主体标识名匹配都可以。

参数:
subject - X500Principal 形式的标识名(或者为 null
从以下版本开始:
1.5

setSubject

public void setSubject(String subjectDN)
                throws IOException
已过时,使用 setSubject(X500Principal)setSubject(byte[]) 替代。由于某些 RFC 2253 String 形式的标识名中会丢失编码信息,所以当此方法与某些证书不匹配时不应该依赖它。

设置 subject 标准。指定的标识名必须与 X509Certificate 中的 主体标识名匹配。如果该主体标识名为 null,则与任何主体标识名匹配都可以。

如果 subjectDN 不为 null,则应该包含一个 RFC 2253 格式的标识名。

参数:
subjectDN - RFC 2253 格式的标识名(或者为 null
抛出:
IOException - 如果出现解析错误(错误的 DN 形式)

setSubject

public void setSubject(byte[] subjectDN)
                throws IOException
设置 subject 标准。指定的标识名必须与 X509Certificate 中的主体标识名匹配。如果该主体标识名为 null,则与任何主体标识名匹配都可以。

如果 subjectDN 不为 null,则应该包含单个 DER 编码形式的标识名,正如 X.501 中定义的一样。有关此结构的 ASN.1 表示,请参阅 setIssuer(byte [] issuerDN)

参数:
subjectDN - 一个 byte 数组,包含 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
 

由于任何标准都没有要求 SubjectKeyIdentifier 的格式,所以 X509CertSelector 不解析 SubjectKeyIdentifier。相反,使用逐字节比较的方式来比较该值。

注意,要复制此处提供的 byte 数组以防后续修改。

参数:
subjectKeyID - SubjectKeyIdentifier(或者为 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。相反,使用逐字节比较的方式来比较该值。

生成 AuthorityKeyIdentifierkeyIdentifier 字段时,通常从发布方证书中的 SubjectKeyIdentifier 扩展中获取该值。但是要注意,在发布方的证书上执行 X509Certificate.getExtensionValue(<SubjectKeyIdentifier Object Identifier>) 所得到的结果可能无法直接用作 setAuthorityKeyIdentifier 的输入。这是因为 SubjectKeyIdentifier 只包含一个 KeyIdentifier OCTET STRING(八位字节字符串),而不是 KeyIdentifier、GeneralNames 和 CertificateSerialNumber 的 SEQUENCE。为了使用发布方证书的 SubjectKeyIdentifier 扩展的扩展值,必需提取嵌入的 KeyIdentifier OCTET STRING 值,然后将此 OCTET STRING 以 DER 编码方式放入一个 SEQUENCE 中。有关 SubjectKeyIdentifier 的更多详细信息,请参见 setSubjectKeyIdentifier(byte[] subjectKeyID)

还要注意,要复制此处提供的 byte 数组以防后续修改。

参数:
authorityKeyID - AuthorityKeyIdentifier(或者为 null
另请参见:
getAuthorityKeyIdentifier()

setCertificateValid

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

注意,要复制此处提供的 Date 以防后续修改。

参数:
certValid - 要检查的 Date(或者为 null
另请参见:
getCertificateValid()

setPrivateKeyValid

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

注意,要复制此处提供的 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 - 用于检查的 subjectPublicKey(或者为 null
另请参见:
getSubjectPublicKey()

setSubjectPublicKey

public void setSubjectPublicKey(byte[] key)
                         throws IOException
设置 subjectPublicKey 标准。X509Certificate 必须包含指定的主体公钥。如果其值为 null,则不执行 subjectPublicKey 检查。

因为此方法允许以 byte 数组的方式指定公钥,所以可将其用于未知的密钥类型。

如果 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
 

注意,要复制此处提供的 byte 数组以防后续修改。

参数:
key - 一个 byte 数组,包含 ASN.1 DER 编码形式的 subjectPublicKey(或者为 null
抛出:
IOException - 如果出现编码错误(subjectPublicKey 形式不正确)
另请参见:
getSubjectPublicKey()

setKeyUsage

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

注意,要复制此处提供的 boolean 数组以防后续修改。

参数:
keyUsage - 一个 boolean 数组,其格式与 X509Certificate.getKeyUsage() 返回的 boolean 数组格式相同。或者为 null
另请参见:
getKeyUsage()

setExtendedKeyUsage

public void setExtendedKeyUsage(Set<String> keyPurposeSet)
                         throws IOException
设置 extendedKeyUsage 标准。X509Certificate 必须允许其 extendedKeyUsage 扩展中的指定 keyPurpose。如果 keyPurposeSet 为空或为 null,则不执行 extendedKeyUsage 检查。注意,没有 extendedKeyUsage 扩展的 X509Certificate 隐式地允许所有 keyPurpose。

注意,要复制该 Set 以防后续修改。

参数:
keyPurposeSet - string 格式的 keyPurpose OID 的 Set(或者为 null)。每个 OID 都由一组句点分隔的非负整数来表示。
抛出:
IOException - 如果该 OID 无效,例如其第一部分不是 0、1 或 2,或第二部分大于 39。
另请参见:
getExtendedKeyUsage()

setMatchAllSubjectAltNames

public void setMatchAllSubjectAltNames(boolean matchAllNames)
允许/禁止匹配 setSubjectAlternativeNamesaddSubjectAlternativeName 方法中所指定的所有 subjectAlternativeNames。如果允许匹配,则 X509Certificate 必须包含所有指定的 subjectAlternativeNames。如果禁止匹配,则 X509Certificate 至少必须包含某个指定的 subjectAlternativeName。

默认情况下,matchAllNames 标志为 true

参数:
matchAllNames - 如果为 true,则启用该标志;如果为 false,则禁用该标志。
另请参见:
getMatchAllSubjectAltNames()

setSubjectAlternativeNames

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

此方法允许调用方(使用单个方法调用)为 subjectAlternativeNames 标准指定完整的 subjectAlternativeNames 集。指定的值会替换 subjectAlternativeNames 标准以前的值。

names 参数(如果不为 null)是一个 Collection,subjectAlternativeNames 标准中所包括的每个名称都对应该集合中的一项。每一项都是一个 List,该 List 的第一项是一个 Integer(0-8,表示名称类型),第二项是一个 String 或 byte 数组(分别为 string 或 ASN.1 DER 编码形式,表示名称)。相同类型可以有多个名称。如果为此参数提供的值为 null,则不执行 subjectAlternativeNames 检查。

Collection 中的每个 subjectAlternativeNames 都可以指定为一个 String 或 一个 ASN.1 编码的 byte 数组。有关所用格式的更多详细信息,请参阅 addSubjectAlternativeName(int type, String name)addSubjectAlternativeName(int type, byte [] name)

注:对于标识名,应指定为 byte 数组,而不是 String。有关更多信息,请参阅 addSubjectAlternativeName(int, String) 中的注视。

注意,names 参数可以包含重复的名称(相同的名称和名称类型),但是可能从 getSubjectAlternativeNames 方法返回的名称 Collection 中将这些名称移除。

注意,要对该 Collection 执行深层复制以防后续修改。

参数:
names - 一个名称 Collection(或者为 null
抛出:
IOException - 如果出现解析错误
另请参见:
getSubjectAlternativeNames()

addSubjectAlternativeName

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

此方法允许调用方向 subjectAlternativeNames 集中添加一个名称。将指定的名称添加到 subjectAlternativeNames 标准的以前值中。如果指定的名称是重复的,则忽略它。

以 string 格式提供该名称。RFC 822、DNS 和 URI 名称使用这些类型(受 RFC 2459 中所包括的限制的影响)的 string 格式。使用四点表示法(dotted quad notation)提供 IPv4 地址名。OID 地址名用一系列句点分隔的非负整数来表示。以 RFC 2253 格式提供目录名(标识名)。对于 otherNames、X.400 名、EDI 方的名称、IPv6 地址名或其他所有名称类型,则没有定义标准 string 格式。应该使用 addSubjectAlternativeName(int type, byte [] name) 方法指定它们。

注:对于标识名,请使用 addSubjectAlternativeName(int, byte[])。由于某些 RFC 2253 String 形式的标识名中会丢失编码信息,所以当此方法与某些证书不匹配时不应该依赖它。

参数:
type - 名称类型(0-8,在 RFC 2459 的 4.2.1.7 部分中指定)
name - string 形式的名称(不能为 null
抛出:
IOException - 如果出现解析错误

addSubjectAlternativeName

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

此方法允许调用方向 subjectAlternativeNames 集中添加一个名称。将指定的名称添加到 subjectAlternativeNames 标准的以前值中。如果指定的名称是重复的,则忽略它。

以 byte 数组的形式提供该名称。此 byte 数组应该包含 DER 编码名称,因为它将出现在 RFC 2459 和 X.509 内所定义的 GeneralName 结构中。已编码的 byte 数组应该只包含该名称的已编码值,不应该包括 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}
 

注意,要复制此处提供的 byte 数组以防后续修改。

参数:
type - 名称类型(0-8,如上所列)
name - 一个 byte 数组,包含 ASN.1 DER 编码形式的名称
抛出:
IOException - 如果出现解析错误

setNameConstraints

public void setNameConstraints(byte[] bytes)
                        throws IOException
设置 NameConstraints 标准。X509Certificate 必须具有满足指定 NameConstraints 要求的 subject 和 subjectAlternativeNames。

以 byte 数组的形式指定该 NameConstraints。此 byte 数组应该包含 DER 编码形式的 NameConstraints,因为它们将出现在 RFC 2459 和 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}
 

注意,要复制此处提供的 byte 数组以防后续修改。

参数:
bytes - 一个 byte 数组,包含为检查 NameConstraints 所使用的 NameConstraints 扩展的 ASN.1 DER 编码。只包括该扩展的值,不包括 OID 或关键性标志。其值可以为 null,此时将不执行 NameConstraints 检查。
抛出:
IOException - 如果出现解析错误
另请参见:
getNameConstraints()

setBasicConstraints

public void setBasicConstraints(int minMaxPathLen)
设置 basicConstraints 限制。如果该值大于等于零,则 X509Certificates 包括的 basicConstraints 扩展具有的 pathLen 不能小于此值。如果该值为 -2,则只接受最终实体证书。如果该值为 -1,则不执行检查。

构建正向证书路径(从目标到受信定位点)时,此限制很有用。如果已构建了部分路径,则任何候选证书的 maxPathLen 值都必须大于等于这些路径中的证书数。

参数:
minMaxPathLen - basicConstraints 限制的值
抛出:
IllegalArgumentException - 如果该值小于 -2
另请参见:
getBasicConstraints()

setPolicy

public void setPolicy(Set<String> certPolicySet)
               throws IOException
设置策略限制。X509Certificate 至少必须包括其证书策略扩展中指定的一种策略。如果 certPolicySet 为空,则 X509Certificate 至少必须包括其证书策略扩展中指定的某个策略。如果 certPolicySetnull,则不执行策略检查。

注意,要复制该 Set 以防后续修改。

参数:
certPolicySet - string 格式的证书策略 OID 的 Set(或者为 null)。每个 OID 都由一组句点分隔的非负整数来表示。
抛出:
IOException - 如果出现 OID 的解析错误,例如其第一部分不是 0、1 或 2,或第二部分大于 39。
另请参见:
getPolicy()

setPathToNames

public void setPathToNames(Collection<List<?>> names)
                    throws IOException
设置 pathToNames 标准。X509Certificate 不能包括禁止构建指定名称路径的 NameConstraints。

此方法允许调用方(使用单个方法调用)指定 X509Certificates 的 NameConstraints 必须允许使用的完整名称集。指定的值会替换 pathToNames 标准以前的值。

构建正向证书路径(从目标到受信定位点)时,此限制很有用。如果已构建了部分路径,则任何候选证书所包括的 NameConstraints 都不能禁止构建到达这些路径中任意名称的路径。

names 参数(如果不为 null)是一个 Collection,pathToNames 标准中所包括的每个名称都对应该集合中的一项。每一项都是一个 List,该 List 的第一项是一个 Integer(0-8,表示名称类型),第二项是一个 String 或 byte 数组(分别为 string 或 ASN.1 DER 编码形式,表示名称)。相同类型可以有多个名称。如果提供的参数值为 null,则不执行 pathToNames 检查。

Collection 中的每个名称都可以指定为一个 String 或一个 ASN.1 编码的 byte 数组。有关所用格式的更多详细信息,请参阅 addPathToName(int type, String name)addPathToName(int type, byte [] name)

注:对于标识名,应指定为 byte 数组,而不是 String。有关更多信息,请参阅 addPathToName(int, String) 中的注释。

注意,names 参数可以包含重复的名称(相同的名称和名称类型),但是可能从 getPathToNames 方法返回的名称 Collection 中将这些名称移除。

注意,要对该 Collection 执行深层复制以防后续修改。

参数:
names - 每个名称都对应一项的 Collection(或者为 null
抛出:
IOException - 如果出现解析错误
另请参见:
getPathToNames()

addPathToName

public void addPathToName(int type,
                          String name)
                   throws IOException
向 pathToNames 标准中添加一个名称。X509Certificate 不能包括禁止构建指定名称路径的 NameConstraints。

此方法允许调用方向 X509Certificates 的 NameConstraints 必须允许使用的名称集中添加一个名称。将指定的名称添加到 pathToNames 标准的以前值中。如果该名称是重复的,则忽略它。

以 string 格式提供该名称。RFC 822、DNS 和 URI 名称使用这些类型(受 RFC 2459 中所包括的限制的影响)的 string 格式。使用四点表示法(dotted quad notation)提供 IPv4 地址名。OID 地址名用一系列句点分隔的非负整数来表示。以 RFC 2253 格式提供目录名(标识名)。对于 otherNames、X.400 名、EDI 方的名称、IPv6 地址名或其他所有名称类型,则没有定义标准 string 格式。应该使用 addPathToName(int type, byte [] name) 方法指定它们。

注:对于标识名,请使用 addPathToName(int, byte[])。由于某些 RFC 2253 String 形式的标识名中会丢失编码信息,所以当此方法与某些证书不匹配时不应该依赖它。

参数:
type - 名称类型(0-8,在 RFC 2459 的 4.2.1.7 部分中指定)
name - string 形式的名称
抛出:
IOException - 如果出现解析错误

addPathToName

public void addPathToName(int type,
                          byte[] name)
                   throws IOException
向 pathToNames 标准中添加一个名称。X509Certificate 不能包括禁止构建指定名称路径的 NameConstraints。

此方法允许调用方向 X509Certificates 的 NameConstraints 必须允许使用的名称集中添加一个名称。将指定的名称添加到 pathToNames 标准的以前值中。如果该名称是重复的,则忽略它。

以 byte 数组的形式提供该名称。此 byte 数组应该包含 DER 编码名称,因为它将出现在 RFC 2459 和 X.509 内所定义的 GeneralName 结构中。addSubjectAlternativeName(int type, byte [] name) 的文档中有此结构的 ASN.1 定义。

注意,要复制此处提供的 byte 数组以防后续修改。

参数:
type - 名称类型(0-8,在 RFC 2459 的 4.2.1.7 部分中指定)
name - 一个 byte 数组,包含 ASN.1 DER 编码名称
抛出:
IOException - 如果出现解析错误

getCertificate

public X509Certificate getCertificate()
返回 certificateEquals 标准。指定的 X509Certificate 必须等于传入到 match 方法的 X509Certificate。如果它为 null,则不进行此项检查。

返回:
要匹配的 X509Certificate(或者为 null
另请参见:
setCertificate(java.security.cert.X509Certificate)

getSerialNumber

public BigInteger getSerialNumber()
返回 serialNumber 标准。指定的 serialNumber 必须与 X509Certificate 中的证书 serialNumber 匹配。如果该 serialNumber 为 null,则任何证书 serialNumber 都可以。

返回:
要匹配的证书 serialNumber(或者为 null
另请参见:
setSerialNumber(java.math.BigInteger)

getIssuer

public X500Principal getIssuer()
X500Principal 的形式返回 issuer 标准。此标识名必须与 X509Certificate 中的发布方标识名匹配。如果该发布方标识名为 null,则禁用 issuer 标准,且与任何发布方标识名匹配都可以。

返回:
以 X500Principal 形式返回所要求的发布方标识名(或者为 null
从以下版本开始:
1.5

getIssuerAsString

public String getIssuerAsString()
已过时,使用 getIssuer()getIssuerAsBytes() 替代。由于某些 RFC 2253 String 形式的标识名中会丢失编码信息,所以当此方法与某些证书不匹配时不应该依赖它。

返回以 String 表示的 issuer 标准。此标识名必须与 X509Certificate 中的发布方标识名匹配。如果该发布方标识名为 null,则禁用 issuer 标准,且与任何发布方标识名匹配都可以。

如果返回的值不为 null,则是一个 RFC 2253 格式的标识名。

返回:
以 RFC 2253 格式返回所要求的发布方标识名(或者为 null

getIssuerAsBytes

public byte[] getIssuerAsBytes()
                        throws IOException
返回以 byte 数组表示的 issuer 标准。此标识名必须与 X509Certificate 中的发布方标识名匹配。如果该发布方标识名为 null,则禁用 issuer 标准,且与任何发布方标识名匹配都可以。

如果返回的值不为 null,则是包含单个 DER 编码形式的标识名的 byte 数组,正如 X.501 中定义的一样。setIssuer(byte [] issuerDN) 的文档中提供了此结构的 ASN.1 表示。

注意,要复制返回的 byte 数组以防后续修改。

返回:
一个 byte 数组,以 ASN.1 DER 格式包含所要求的发布方标识名(或者为 null
抛出:
IOException - 如果出现编码错误

getSubject

public X500Principal getSubject()
X500Principal 的形式返回 subject 标准。此标识名必须与 X509Certificate 中的主体标识名匹配。如果该主体标识名为 null,则禁用 subject 标准,且与任何主体标识名匹配都可以。

返回:
以 X500Principal 形式返回所要求的主体标识名(或者为 null
从以下版本开始:
1.5

getSubjectAsString

public String getSubjectAsString()
已过时,使用 getSubject()getSubjectAsBytes() 替代。由于某些 RFC 2253 String 形式的标识名中会丢失编码信息,所以当此方法与某些证书不匹配时不应该依赖它。

返回以 String 表示的 subject 标准。此标识名必须与 X509Certificate 中的主体标识名匹配。如果该主体标识名为 null,则禁用 subject 标准,且与任何主体标识名匹配都可以。

如果返回的值不为 null,则是一个 RFC 2253 格式的标识名。

返回:
以 RFC 2253 格式返回所要求的主体标识名(或者为 null

getSubjectAsBytes

public byte[] getSubjectAsBytes()
                         throws IOException
以 byte 数组的形式返回 subject 标准。此标识名必须与 X509Certificate 中的主体标识名匹配。如果该主体标识名为 null,则禁用 subject 标准,且与任何主体标识名匹配都可以。

如果返回的值不为 null,则是包含单个 DER 编码形式的标识名的 byte 数组,正如 X.501 中定义的一样。setSubject(byte [] subjectDN) 的文档中提供了此结构的 ASN.1 表示。

注意,要复制返回的 byte 数组以防后续修改。

返回:
一个 byte 数组,以 ASN.1 DER 格式包含所要求的主体标识名(或者为 null
抛出:
IOException - 如果出现编码错误

getSubjectKeyIdentifier

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

注意,要复制返回的 byte 数组以防后续修改。

返回:
密钥标识符(或者为 null
另请参见:
setSubjectKeyIdentifier(byte[])

getAuthorityKeyIdentifier

public byte[] getAuthorityKeyIdentifier()
返回 authorityKeyIdentifier 标准。X509Certificate 必须包含一个具有指定值的 AuthorityKeyIdentifier 扩展。如果其值为 null,则不执行 authorityKeyIdentifier 检查。

注意,要复制返回的 byte 数组以防后续修改。

返回:
密钥标识符(或者为 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 检查。

返回:
用于检查的 subjectPublicKey(或者为 null
另请参见:
setSubjectPublicKey(java.security.PublicKey)

getKeyUsage

public boolean[] getKeyUsage()
返回 keyUsage 标准。X509Certificate 必须允许使用指定的 keyUsage 值。如果其值为 null,则不执行 keyUsage 检查。

注意,要复制返回的 boolean 数组以防后续修改。

返回:
一个 boolean 数组,其格式与 X509Certificate.getKeyUsage() 返回的 boolean 数组格式相同。或者为 null
另请参见:
setKeyUsage(boolean[])

getExtendedKeyUsage

public Set<String> getExtendedKeyUsage()
返回 extendedKeyUsage 标准。X509Certificate 必须允许其 extendedKeyUsage 扩展中的指定 keyPurpose。如果返回的 keyPurposeSet 为空或为 null,则不执行 extendedKeyUsage 检查。注意,没有 extendedKeyUsage 扩展的 X509Certificate 隐式地允许所有 keyPurpose。

返回:
一个 string 格式的 keyPurpose OID 的不可变 Set(或者为 null
另请参见:
setExtendedKeyUsage(java.util.Set)

getMatchAllSubjectAltNames

public boolean getMatchAllSubjectAltNames()
指示 X509Certificate 是否必须包含 setSubjectAlternativeNamesaddSubjectAlternativeName 方法中所指定的所有或至少某个 subjectAlternativeNames。如果此方法返回值为 true,则 X509Certificate 必须包含所有指定的 subjectAlternativeNames。如果为 false,则 X509Certificate 必须至少包含某个指定的 subjectAlternativeNames。

返回:
如果启用此标志,则返回 true;如果禁用此标志,则返回 false。默认情况下此标志为 true
另请参见:
setMatchAllSubjectAltNames(boolean)

getSubjectAlternativeNames

public Collection<List<?>> getSubjectAlternativeNames()
返回 subjectAlternativeNames 标准的一个副本。X509Certificate 必须包含所有或至少某个指定的 subjectAlternativeNames,这取决于 matchAllNames 标志的值(参见 getMatchAllSubjectAltNames)。如果返回的值为 null,则不执行 subjectAlternativeNames 检查。

如果返回的值不为 null,则是一个 Collection,subjectAlternativeNames 标准中所包括的每个名称在该集合中都对应一项。每一项都是一个 List,该 List 的第一项是一个 Integer(0-8,表示名称类型),第二项是一个 String 或 byte 数组(分别为 string 或 ASN.1 DER 编码形式,表示名称)。相同类型可以有多个名称。注意,返回的 Collection 可能包含重复的名称(相同的名称和名称类型)。

Collection 中的每个 subjectAlternativeNames 都可以指定为一个 String 或 一个 ASN.1 编码的 byte 数组。有关所用格式的更多详细信息,请参阅 addSubjectAlternativeName(int type, String name)addSubjectAlternativeName(int type, byte [] name)

注意,要对该 Collection 执行深层复制以防后续修改。

返回:
一个名称 Collection(或者为 null
另请参见:
setSubjectAlternativeNames(java.util.Collection>)

getNameConstraints

public byte[] getNameConstraints()
返回 NameConstraints 标准。X509Certificate 必须具有满足指定 NameConstraints 要求的 subject 和 subjectAlternativeNames。

以 byte 数组的形式返回该 NameConstraints。此 byte 数组包含 DER 编码形式的 NameConstraints,因为它们将出现在 RFC 2459 和 X.509 内所定义的 NameConstraints 结构中。setNameConstraints(byte [] bytes) 的文档中提供了此结构的 ASN.1 表示。

注意,要复制返回的 byte 数组以防后续修改。

返回:
一个 byte 数组,包含为检查 NameConstraints 所使用的 NameConstraints 扩展的 ASN.1 DER 编码,如果不执行 NameConstraints 检查,则返回 null
另请参见:
setNameConstraints(byte[])

getBasicConstraints

public int getBasicConstraints()
返回 BasicConstraints 限制。如果该值大于等于零,则 X509Certificates 包括的 basicConstraints 扩展具有的 pathLen 不能小于此值。如果该值为 -2,则只接受终最终实体证书。如果该值为 -1,则不执行 basicConstraints 检查。

返回:
basicConstraints 限制的值
另请参见:
setBasicConstraints(int)

getPolicy

public Set<String> getPolicy()
返回策略标准。X509Certificate 至少必须包括其证书策略扩展中指定的一种策略。如果返回的 Set 为空,则 X509Certificate 至少必须包括其证书策略扩展中指定的某个策略。如果返回的 Setnull,则不执行策略检查。

返回:
一个 string 格式的证书策略 OID 的不可变 Set(或者为 null
另请参见:
setPolicy(java.util.Set)

getPathToNames

public Collection<List<?>> getPathToNames()
返回 pathToNames 标准的一个副本。X509Certificate 不能包括禁止构建指定名称路径的 NameConstraints。如果返回的值为 null,则不执行 pathToNames 检查。

如果返回的值不为 null,则是一个 Collection,pathToNames 标准中所包括的每个名称在该集合中都对应一项。每一项都是一个 List,该 List 的第一项是一个 Integer(0-8,表示名称类型),第二项是一个 String 或 byte 数组(分别为 string 或 ASN.1 DER 编码形式,表示名称)。相同类型可以有多个名称。注意,返回的 Collection 可能包含重复的名称(相同的名称和名称类型)。

Collection 中的每个名称都可以指定为一个 String 或一个 ASN.1 编码的 byte 数组。有关所用格式的更多详细信息,请参阅 addPathToName(int type, String name)addPathToName(int type, byte [] name)

注意,要对该 Collection 执行深层复制以防后续修改。

返回:
一个名称 Collection(或者为 null
另请参见:
setPathToNames(java.util.Collection>)

toString

public String toString()
返回该 CertSelector 的可打印表示形式。

覆盖:
Object 中的 toString
返回:
描述此 CertSelector 内容的 String

match

public boolean match(Certificate cert)
决定是否应该选择某个 Certificate

指定者:
接口 CertSelector 中的 match
参数:
cert - 要检查的 Certificate
返回:
如果应该选择该 Certificate,则返回 true;否则返回 false

clone

public Object clone()
返回此对象的副本。

指定者:
接口 CertSelector 中的 clone
覆盖:
Object 中的 clone
返回:
副本
另请参见:
Cloneable

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策