public class CertificateFactory extends Object
CertPath
)和证书吊销列表(CRL)对象。
对于由多个证书组成的编码,当您要解析可能不相关证书的generateCertificates
时,请使用generateCertificates。 否则,使用generateCertPath
当你想生成CertPath
(证书链)并随后与验证它CertPathValidator
。
对于X.509证书工厂必须返回是一个实例证明java.security.cert.X509Certificate
这是一个实例,和CRL 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);
}
Java平台的每个实现都需要支持以下标准CertificateFactory
类型:
X.509
CertPath
编码:
PKCS7
PkiPath
Certificate
, X509Certificate
, CertPath
, CRL
, X509CRL
Modifier | Constructor and Description |
---|---|
protected |
CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type)
创建给定类型的CertificateFactory对象,并将给定的提供者实现(SPI对象)封装在其中。
|
Modifier and Type | Method and Description |
---|---|
Certificate |
generateCertificate(InputStream inStream)
生成证书对象,并使用从输入流
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读取的数据进行
InputStream 。
|
CertPath |
generateCertPath(List<? extends Certificate> certificates)
生成一个
CertPath 对象,并用List的
List 进行
Certificate 。
|
CRL |
generateCRL(InputStream inStream)
生成证书吊销列表(CRL)对象,并使用从输入流
inStream 读取的数据进行
inStream 。
|
Collection<? extends CRL> |
generateCRLs(InputStream inStream)
返回从给定输入流
inStream 读取的CRL的(可能为空的)集合视图。
|
Iterator<String> |
getCertPathEncodings()
返回此证书工厂
CertPath CertPath编码的迭代,首先使用默认编码。
|
static CertificateFactory |
getInstance(String type)
返回实现指定证书类型的证书工厂对象。
|
static CertificateFactory |
getInstance(String type, Provider provider)
返回指定证书类型的证书工厂对象。
|
static CertificateFactory |
getInstance(String type, String provider)
返回指定证书类型的证书工厂对象。
|
Provider |
getProvider()
返回此证书工厂的提供者。
|
String |
getType()
返回与该证书工厂相关联的证书类型的名称。
|
protected CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type)
certFacSpi
- 提供者实现。
provider
- 提供商。
type
- 证书类型。
public static final CertificateFactory getInstance(String type) throws CertificateException
此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定类型的第一个Provider中封装CertificateFactorySpi实现的新CertificateFactory对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
type
- 请求的证书类型的名称。
看到的CertificateFactory部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准证书类型的信息。
CertificateException
- 如果没有提供者支持指定类型的CertificateFactorySpi实现。
Provider
public static final CertificateFactory getInstance(String type, String provider) throws CertificateException, NoSuchProviderException
返回从指定提供程序封装CertificateFactorySpi实现的新CertificateFactory对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
type
- 证书类型。
看到的CertificateFactory部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准证书类型的信息。
provider
- 提供者的名称。
CertificateException
- 如果指定的算法的CertificateFactorySpi实现不能从指定的提供者获得。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
IllegalArgumentException
- 如果提供者名称为空或为空。
Provider
public static final CertificateFactory getInstance(String type, Provider provider) throws CertificateException
返回从指定的Provider对象封装CertificateFactorySpi实现的新CertificateFactory对象。 请注意,指定的Provider对象不必在提供者列表中注册。
type
- 证书类型。
看到的CertificateFactory部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准证书类型的信息。
provider
- 提供商。
CertificateException
- 如果指定的算法的CertificateFactorySpi实现从指定的Provider对象不可用。
IllegalArgumentException
- 如果
provider
为null。
Provider
public final Provider getProvider()
public final String getType()
public final Certificate generateCertificate(InputStream inStream) throws CertificateException
inStream
读取的数据进行inStream
。
为了利用此证书工厂支持的特殊证书格式,返回的证书对象可以类型转换为相应的证书类。 例如,如果此证书工厂实施X.509证书,则返回的证书对象可以是类型为X509Certificate
类。
在X.509证书的证书工厂的情况下,inStream中提供的inStream
必须是DER编码的,并且可以以二进制或可打印(Base64)编码提供。 如果证书是以Base64编码方式提供的,则必须以----- BEGIN CERTIFICATE -----开头为边界,并且必须在----- END CERTIFICATE ----- 。
请注意,如果给定的输入流不支持mark
和reset
,则此方法将消耗整个输入流。 否则,对该方法的每次调用都会消耗一个证书,并且输入流的读取位置位于固有的证书结束标记之后的下一个可用字节。 如果输入流中的数据不包含固有的证书结束标记(EOF除外),并且在证书被解析后存在尾随数据,则会抛出一个CertificateException
。
inStream
- 具有证书数据的输入流。
CertificateException
- 解析错误。
public final Iterator<String> getCertPathEncodings()
CertPath
CertPath编码的迭代,首先使用默认编码。
看到的CertPath编码部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准编码名称及其格式的信息。
尝试通过其remove
方法修改返回的Iterator
将导致UnsupportedOperationException
。
Iterator
的支持的CertPath
CertPath
名称(作为
String
)
public final CertPath generateCertPath(InputStream inStream) throws CertificateException
CertPath
对象,并使用从InputStream
inStream读取的数据进行InputStream
。
数据假定为默认编码。
默认编码的名称是的第一个元素Iterator
由返回getCertPathEncodings
方法。
inStream
- 包含数据的
InputStream
CertPath
初始化的数据来自
InputStream
CertificateException
- 解码时是否发生异常
public final CertPath generateCertPath(InputStream inStream, String encoding) throws CertificateException
CertPath
对象,并使用从InputStream
inStream读取的数据进行InputStream
。
数据假定为指定的编码。
看到的CertPath编码部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准编码名称及其格式的信息。
inStream
- 一个
InputStream
数据的
InputStream
encoding
- 用于数据的编码
CertPath
初始化的数据来自
InputStream
CertificateException
- 如果在解码或请求的编码不支持时发生异常
public final CertPath generateCertPath(List<? extends Certificate> certificates) throws CertificateException
CertPath
对象,并使用88429399974051的List
进行Certificate
。
提供的证书必须是CertificateFactory支持的CertificateFactory
。 它们将从提供的List
对象中复制出来。
certificates
- a
List
,
Certificate
s
CertPath
用提供的证书列表初始化
CertificateException
- 如果发生异常
public final Collection<? extends Certificate> generateCertificates(InputStream inStream) throws CertificateException
inStream
读取的证书的(可能为空的)集合视图。
为了利用此证书工厂支持的特殊证书格式,返回的集合视图中的每个元素都可以类型转换为相应的证书类。 例如,如果此证书工厂实施X.509证书,则返回的集合中的元素可以类型转换为X509Certificate
类。
在证书工厂X.509证书的情况下, inStream
可以包含在所描述的格式的DER编码的证书的序列generateCertificate
。 另外, inStream
可能包含PKCS#7证书链。 这是一个PKCS#7 SignedData对象,唯一有效的字段是证书 。 特别地,签名和内容被忽略。 此格式允许一次下载多个证书。 如果没有证书,则返回空集合。
inStream
- 具有
inStream
的输入流。
CertificateException
- 解析错误。
public final CRL generateCRL(InputStream inStream) throws CRLException
inStream
读取的数据进行inStream
。
为了利用此证书工厂支持的专用CRL格式,返回的CRL对象可以对应于相应的CRL类型。 例如,如果此证书工厂实现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的(可能为空的)集合视图。
为了利用此证书工厂支持的专用CRL格式,返回的集合视图中的每个元素都可以类型转换为相应的CRL类。 例如,如果此证书工厂实现X.509 CRL,则返回的集合中的元素可以类型转换为X509CRL
类。
在X.509 CRL的证书工厂的情况下, inStream
可能包含一系列DER编码的CRL。 另外, inStream
可能包含PKCS#7 CRL集。 这是一个PKCS#7 SignedData对象,唯一有效的字段是crls 。 特别地,签名和内容被忽略。 此格式允许一次下载多个CRL。 如果没有CRL,则返回一个空的集合。
inStream
- 具有CRL的输入流。
CRLException
- 解析错误。