java.security.cert

接口
异常
java.lang.Object
  继承者 java.security.cert.CertificateFactory

public class CertificateFactory
     
extends Object

此类定义了用于从相关的编码中生成证书、证书路径 (CertPath) 和证书撤消列表 (CRL) 对象的 CertificateFactory 功能。

为了实现多个证书组成的编码,如果要解析一个可能由多个不相关证书组成的集合时,应使用 generateCertificates。否则,如果要生成 CertPath(证书链)并随后使用 CertPathValidator 验证它,则应使用 generateCertPath

X.509 的 CertificateFactory 返回的证书必须是 java.security.cert.X509Certificate 的实例,CRL 的 CertificateFactory 返回的证书则必须是 java.security.cert.X509CRL 的实例。

以下示例代码读取一个具有 Base64 编码证书的文件,该证书由 -----BEGIN CERTIFICATE----- 语句开始,由 -----END CERTIFICATE----- 语句结束。我们将 FileInputStream(它不支持 markreset)转换成 BufferedInputStream(它支持这些方法),这样每次调用 generateCertificate 只需要一个证书,并将输入流的读取位置定位在文件中的下一个证书处:

 FileInputStream fis = new FileInputStream(filename);
 BufferedInputStream bis = new BufferedInputStream(fis);

 CertificateFactory cf = CertificateFactory.getInstance("X.509");

 while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    System.out.println(cert.toString());
 }
 

以下示例代码将解析存储在文件中的 PKCS#7 格式的证书答复,并从中提取所有的证书:

 FileInputStream fis = new FileInputStream(filename);
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 Collection c = cf.generateCertificates(fis);
 Iterator i = c.iterator();
 while (i.hasNext()) {
    Certificate cert = (Certificate)i.next();
    System.out.println(cert);
 }
 

从以下版本开始:
1.2
另请参见:
Certificate, X509Certificate, CertPath, CRL, X509CRL

构造方法摘要
protected CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type)
          创建给定类型的 CertificateFactory 对象,并在其中封装给定的提供者实现(SPI 对象)。
 
方法摘要
 Certificate generateCertificate(InputStream inStream)
          生成一个证书对象,并使用从输入流 inStream 中读取的数据对它进行初始化。
 Collection<? extends Certificate> generateCertificates(InputStream inStream)
          返回从给定输入流 inStream 中读取的证书的集合视图(可能为空)。
 CertPath generateCertPath(InputStream inStream)
          生成一个 CertPath 对象,并使用从 InputStream inStream 中读取的数据对它进行初始化。
 CertPath generateCertPath(InputStream inStream, String encoding)
          生成一个 CertPath 对象,并使用从 InputStream inStream 中读取的数据对它进行初始化。
 CertPath generateCertPath(List<? extends Certificate> certificates)
          生成一个 CertPath 对象,并使用一个 CertificateList 对它进行初始化。
 CRL generateCRL(InputStream inStream)
          生成一个证书撤消列表 (CRL) 对象,并使用从输入流 inStream 中读取的数据对它进行初始化。
 Collection<? extends CRL> generateCRLs(InputStream inStream)
          返回从给定输入流 inStream 中读取的 CRL 的集合视图(可能为空)。
 Iterator<String> getCertPathEncodings()
          返回此 CertificateFactory 支持的 CertPath 编码的迭代器,默认编码方式优先。
static CertificateFactory getInstance(String type)
          返回实现指定证书类型的 CertificateFactory 对象。
static CertificateFactory getInstance(String type, Provider provider)
          返回指定证书类型的 CertificateFactory 对象。
static CertificateFactory getInstance(String type, String provider)
          返回指定证书类型的 CertificateFactory 对象。
 Provider getProvider()
          返回此 CertificateFactory 的提供者。
 String getType()
          返回与此 CertificateFactory 关联的证书类型的名称。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

CertificateFactory

protected CertificateFactory(CertificateFactorySpi certFacSpi,
                             Provider provider,
                             String type)
创建给定类型的 CertificateFactory 对象,并在其中封装给定的提供者实现(SPI 对象)。

参数:
certFacSpi - 提供者实现。
provider - 提供者。
type - 证书类型。
方法详细信息

getInstance

public static final CertificateFactory getInstance(String type)
                                            throws CertificateException
返回实现指定证书类型的 CertificateFactory 对象。

此方法从首选提供者开始遍历已注册安全提供者列表。返回封装 CertificateFactorySpi 实现的新 CertificateFactory 对象,该实现取自第一个支持指定类型的 Provider。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
type - 所请求的证书类型的名称。有关标准证书类型的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
返回:
指定类型的 CertificateFactory 对象。
抛出:
CertificateException - 如果没有 Provider 支持指定类型的 CertificateFactorySpi 实现。
另请参见:
Provider

getInstance

public static final CertificateFactory getInstance(String type,
                                                   String provider)
                                            throws CertificateException,
                                                   NoSuchProviderException
返回指定证书类型的 CertificateFactory 对象。

返回封装 CertificateFactorySpi 实现的新 CertificateFactory 对象,该实现取自指定提供者。指定提供者必须在安全提供者列表中注册。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
type - 证书类型。有关标准证书类型的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider - 提供者的名称。
返回:
指定类型的 CertificateFactory 对象。
抛出:
CertificateException - 如果指定算法的 CertificateFactorySpi 实现不能从指定提供者获得。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException - 如果提供者的名称为 null 或空。
另请参见:
Provider

getInstance

public static final CertificateFactory getInstance(String type,
                                                   Provider provider)
                                            throws CertificateException
返回指定证书类型的 CertificateFactory 对象。

返回封装 CertificateFactorySpi 实现的新 CertificateFactory 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象并不一定要在提供者列表中注册。

参数:
type - 证书类型。有关标准证书类型的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider - 提供者。
返回:
指定类型的 CertificateFactory 对象。
抛出:
CertificateException - 如果指定算法的 CertificateFactorySpi 实现不能从指定提供者对象获得。
IllegalArgumentException - 如果 provider 为 null。
从以下版本开始:
1.4
另请参见:
Provider

getProvider

public final Provider getProvider()
返回此 CertificateFactory 的提供者。

返回:
此 CertificateFactory 的提供者。

getType

public final String getType()
返回与此 CertificateFactory 关联的证书类型的名称。

返回:
与此 CertificateFactory 关联的证书类型的名称。

generateCertificate

public final Certificate generateCertificate(InputStream inStream)
                                      throws CertificateException
生成一个证书对象,并使用从输入流 inStream 中读取的数据对它进行初始化。

为了利用受此 CertificateFactory 支持的专门的证书格式,可将返回的证书对象的类型强制转换为相应的证书类。例如,如果此 CertificateFactory 实现 X.509 证书,则可将返回的证书对象的类型强制转换为 X509Certificate 类。

在用于 X.509 证书的 CertificateFactory 情况中,inStream 中提供的证书必须是 DER 编码的,并且可以用二进制或可打印的 (Base64) 编码形式提供。如果以 Base64 编码的形式提供该证书,则该证书必须由 -----BEGIN CERTIFICATE----- 语句开始,由 -----END CERTIFICATE----- 语句结束。

注意,如果给定的输入流不支持 markreset,则此方法将使用整个输入流。否则,每次调用此方法都需要一个证书,并且将输入流的读取位置定位在固有的证书结尾标记后的下一个可用字节处。如果输入流中的数据不包含固有的证书结尾标记(不同于 EOF),并且在解析该证书后有一个尾随数据,则将抛出 CertificateException

参数:
inStream - 带有证书数据的输入流。
返回:
已使用输入流中的数据初始化的证书对象。
抛出:
CertificateException - 如果发生解析错误。

getCertPathEncodings

public final Iterator<String> getCertPathEncodings()
返回此 CertificateFactory 支持的 CertPath 编码的迭代器,默认编码方式优先。有关标准编码名称及其格式的信息,请参见 Java Certification Path API Programmer's Guide 中的附录 A。

试图修改返回的 Iterator(通过其 remove 方法)会导致抛出 UnsupportedOperationException

返回:
在受支持的 CertPath 编码名称(以 String 的形式)上进行迭代的 Iterator
从以下版本开始:
1.4

generateCertPath

public final CertPath generateCertPath(InputStream inStream)
                                throws CertificateException
生成一个 CertPath 对象,并使用从 InputStream inStream 中读取的数据对它进行初始化。假定数据是以默认编码方式进行编码的。默认编码名称是 getCertPathEncodings 方法返回的 Iterator 的第一个元素。

参数:
inStream - 包含数据的 InputStream
返回:
已使用 InputStream 中的数据初始化的 CertPath
抛出:
CertificateException - 如果解码时出现异常
从以下版本开始:
1.4

generateCertPath

public final CertPath generateCertPath(InputStream inStream,
                                       String encoding)
                                throws CertificateException
生成一个 CertPath 对象,并使用从 InputStream inStream 中读取的数据对它进行初始化。假定数据是以指定的编码方式进行编码的。有关标准编码名称及其格式的信息,请参见 Java Certification Path API Programmer's Guide 中的附录 A。

参数:
inStream - 包含数据的 InputStream
encoding - 数据使用的编码
返回:
已使用 InputStream 中的数据初始化的 CertPath
抛出:
CertificateException - 如果解码时出现异常或者不支持所请求的编码
从以下版本开始:
1.4

generateCertPath

public final CertPath generateCertPath(List<? extends Certificate> certificates)
                                throws CertificateException
生成一个 CertPath 对象,并使用一个 CertificateList 对它进行初始化。

所提供的证书必须是该 CertificateFactory 支持的类型。将从提供的 List 对象中复制出这些证书。

参数:
certificates - CertificateList
返回:
已使用所提供的证书列表初始化的 CertPath
抛出:
CertificateException - 如果出现异常
从以下版本开始:
1.4

generateCertificates

public final Collection<? extends Certificate> generateCertificates(InputStream inStream)
                                                             throws CertificateException
返回从给定输入流 inStream 中读取的证书的集合视图(可能为空)。

为了利用此 CertificateFactory 所支持的特殊证书格式,可将返回的集合视图中的每个元素的类型强制转换为相应的证书类。例如,如果此 CertificateFactory 实现 X.509 证书,则可将返回集合中的元素的类型强制转换为 X509Certificate 类。

在用于 X.509 证书的 CertificateFactory 的情况中,inStream 可能包含一个 DER 编码的证书序列,这些证书使用 generateCertificate 所描述的格式。另外,inStream 可能包含一个 PKCS#7 证书链。这是一个 PKCS#7 SignedData 对象,具有唯一认可 的有效字段。需要特别指出的是,签名和内容会被忽略。此格式允许同时下载多个证书。如果没有证书,则返回一个空集合。

注意,如果给定的输入流不支持 markreset,则此方法将使用整个输入流。

参数:
inStream - 带有证书的输入流。
返回:
java.security.cert.Certificate 对象的集合视图(可能为空),用输入流中的数据对该对象进行初始化。
抛出:
CertificateException - 如果发生解析错误。

generateCRL

public final CRL generateCRL(InputStream inStream)
                      throws CRLException
生成一个证书撤消列表 (CRL) 对象,并使用从输入流 inStream 中读取的数据对它进行初始化。

为了利用此受 CertificateFactory 支持的专门的 CRL 格式,可将返回的 CRL 对象的类型强制转换为相应的 CRL 类。例如,如果此 CertificateFactory 实现 X.509 CRL,则可将返回的 CRL 对象的类型强制转换为 X509CRL 类。

注意,如果给定的输入流不支持 markreset,则此方法将使用整个输入流。否则,每次调用此方法都需要一个 CRL,并且将输入流的读取位置定位在固有 CRL 结尾标记后的下一个可用字节处。如果输入流中的数据不包含固有的 CRL 结尾标记(不同于 EOF),并且在解析该 CRL 后有一个尾随数据,则将抛出 CRLException

参数:
inStream - 带有 CRL 数据的输入流。
返回:
已使用输入流中的数据初始化的 CRL 对象。
抛出:
CRLException - 如果发生解析错误。

generateCRLs

public final Collection<? extends CRL> generateCRLs(InputStream inStream)
                                             throws CRLException
返回从给定输入流 inStream 中读取的 CRL 的集合视图(可能为空)。

为了利用受此 CertificateFactory 支持的专门的 CRL 格式,可将返回的集合视图中的每个元素的类型强制转换为相应的 CRL 类。例如,如果此 CertificateFactory 实现 X.509 CRL,则可将返回集合中的元素类型强制转换为 X509CRL 类。

在用于 X.509 CRL 的 CertificateFactory 情况中,inStream 可能包含一个 DER 编码的 CRL 序列。另外,inStream 可能包含一个 PKCS#7 CRL 集合。这是一个 PKCS#7 SignedData 对象,具有唯一被 crl 的有效字段。需要特别指出的是,签名和内容会被忽略。此格式允许同时下载多个 CRL。如果没有 CRL,则返回一个空集合。

注意,如果给定的输入流不支持 markreset,则此方法将使用整个输入流。

参数:
inStream - 带有 CRL 的输入流。
返回:
java.security.cert.CRL 对象的集合视图(可能为空),用输入流中的数据对该对象进行初始化。
抛出:
CRLException - 如果发生解析错误。