java.lang.Object java.security.cert.CertificateFactory
public class CertificateFactory
此类定义了用于从相关的编码中生成证书、证书路径 (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
(它不支持 mark
和 reset
)转换成 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); }
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 对象,并使用一个 Certificate 的 List 对它进行初始化。 |
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 |
构造方法详细信息 |
---|
protected CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type)
certFacSpi
- 提供者实现。
provider
- 提供者。
type
- 证书类型。
方法详细信息 |
---|
public static final CertificateFactory getInstance(String type) throws CertificateException
此方法从首选提供者开始遍历已注册安全提供者列表。返回封装 CertificateFactorySpi 实现的新 CertificateFactory 对象,该实现取自第一个支持指定类型的 Provider。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
type
- 所请求的证书类型的名称。有关标准证书类型的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
CertificateException
- 如果没有 Provider 支持指定类型的 CertificateFactorySpi 实现。
Provider
public static final CertificateFactory getInstance(String type, String provider) throws CertificateException, NoSuchProviderException
返回封装 CertificateFactorySpi 实现的新 CertificateFactory 对象,该实现取自指定提供者。指定提供者必须在安全提供者列表中注册。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
type
- 证书类型。有关标准证书类型的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider
- 提供者的名称。
CertificateException
- 如果指定算法的 CertificateFactorySpi 实现不能从指定提供者获得。
NoSuchProviderException
- 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException
- 如果提供者的名称为 null 或空。
Provider
public static final CertificateFactory getInstance(String type, Provider provider) throws CertificateException
返回封装 CertificateFactorySpi 实现的新 CertificateFactory 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象并不一定要在提供者列表中注册。
type
- 证书类型。有关标准证书类型的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider
- 提供者。
CertificateException
- 如果指定算法的 CertificateFactorySpi 实现不能从指定提供者对象获得。
IllegalArgumentException
- 如果
provider
为 null。
Provider
public final Provider getProvider()
public final String getType()
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----- 语句结束。
注意,如果给定的输入流不支持 mark
和 reset
,则此方法将使用整个输入流。否则,每次调用此方法都需要一个证书,并且将输入流的读取位置定位在固有的证书结尾标记后的下一个可用字节处。如果输入流中的数据不包含固有的证书结尾标记(不同于 EOF),并且在解析该证书后有一个尾随数据,则将抛出 CertificateException
。
inStream
- 带有证书数据的输入流。
CertificateException
- 如果发生解析错误。
public final Iterator<String> getCertPathEncodings()
CertPath
编码的迭代器,默认编码方式优先。有关标准编码名称及其格式的信息,请参见
Java Certification Path API Programmer's Guide 中的附录 A。
试图修改返回的 Iterator
(通过其 remove
方法)会导致抛出 UnsupportedOperationException
。
CertPath
编码名称(以
String
的形式)上进行迭代的
Iterator
public final CertPath generateCertPath(InputStream inStream) throws CertificateException
CertPath
对象,并使用从
InputStream
inStream 中读取的数据对它进行初始化。假定数据是以默认编码方式进行编码的。默认编码名称是
getCertPathEncodings
方法返回的
Iterator
的第一个元素。
inStream
- 包含数据的
InputStream
InputStream
中的数据初始化的
CertPath
CertificateException
- 如果解码时出现异常
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
- 如果解码时出现异常或者不支持所请求的编码
public final CertPath generateCertPath(List<? extends Certificate> certificates) throws CertificateException
CertPath
对象,并使用一个
Certificate
的
List
对它进行初始化。
所提供的证书必须是该 CertificateFactory
支持的类型。将从提供的 List
对象中复制出这些证书。
certificates
-
Certificate
的
List
CertPath
CertificateException
- 如果出现异常
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 对象,具有唯一认可 的有效字段。需要特别指出的是,签名和内容会被忽略。此格式允许同时下载多个证书。如果没有证书,则返回一个空集合。
注意,如果给定的输入流不支持 mark
和 reset
,则此方法将使用整个输入流。
inStream
- 带有证书的输入流。
CertificateException
- 如果发生解析错误。
public final CRL generateCRL(InputStream inStream) throws CRLException
inStream
中读取的数据对它进行初始化。
为了利用此受 CertificateFactory 支持的专门的 CRL 格式,可将返回的 CRL 对象的类型强制转换为相应的 CRL 类。例如,如果此 CertificateFactory 实现 X.509 CRL,则可将返回的 CRL 对象的类型强制转换为 X509CRL
类。
注意,如果给定的输入流不支持 mark
和 reset
,则此方法将使用整个输入流。否则,每次调用此方法都需要一个 CRL,并且将输入流的读取位置定位在固有 CRL 结尾标记后的下一个可用字节处。如果输入流中的数据不包含固有的 CRL 结尾标记(不同于 EOF),并且在解析该 CRL 后有一个尾随数据,则将抛出 CRLException
。
inStream
- 带有 CRL 数据的输入流。
CRLException
- 如果发生解析错误。
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,则返回一个空集合。
注意,如果给定的输入流不支持 mark
和 reset
,则此方法将使用整个输入流。
inStream
- 带有 CRL 的输入流。
CRLException
- 如果发生解析错误。