CertPath)和证书吊销列表(CRL)对象。
对于由多个证书组成的编码,当您想要解析一组可能不相关的证书时,请使用generateCertificates。否则,当您想要生成一个CertPath(证书链)并随后使用CertPathValidator验证它时,请使用generateCertPath。
X.509的证书工厂必须返回java.security.cert.X509Certificate的证书实例,以及java.security.cert.X509CRL的CRL实例。
以下示例读取一个包含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编码:
PKCS7PkiPath
- 自版本:
- 1.2
- 参见:
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedCertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type) 创建给定类型的CertificateFactory对象,并将给定的提供程序实现(SPI对象)封装在其中。 -
Method Summary
Modifier and TypeMethodDescriptionfinal CertificategenerateCertificate(InputStream inStream) 生成证书对象并使用从输入流inStream读取的数据进行初始化。final Collection<? extends Certificate> generateCertificates(InputStream inStream) 返回从给定输入流inStream读取的证书的(可能为空的)集合视图。final CertPathgenerateCertPath(InputStream inStream) 生成CertPath对象并使用从InputStreaminStream读取的数据进行初始化。final CertPathgenerateCertPath(InputStream inStream, String encoding) 生成CertPath对象并使用从InputStreaminStream读取的数据进行初始化。final CertPathgenerateCertPath(List<? extends Certificate> certificates) 生成CertPath对象并使用Certificate的List进行初始化。final CRLgenerateCRL(InputStream inStream) 生成证书吊销列表(CRL)对象并使用从输入流inStream读取的数据进行初始化。final Collection<? extends CRL> generateCRLs(InputStream inStream) 返回从给定输入流inStream读取的CRL(可能为空的)集合视图。返回此证书工厂支持的CertPath编码的迭代,首先是默认编码。static final CertificateFactorygetInstance(String type) 返回实现指定证书类型的证书工厂对象。static final CertificateFactorygetInstance(String type, String provider) 返回指定证书类型的证书工厂对象。static final CertificateFactorygetInstance(String type, Provider provider) 返回指定证书类型的证书工厂对象。final Provider返回此证书工厂的提供程序。final StringgetType()返回与此证书工厂关联的证书类型的名称。
-
Constructor Details
-
CertificateFactory
创建给定类型的CertificateFactory对象,并将给定的提供程序实现(SPI对象)封装在其中。- 参数:
-
certFacSpi- 提供程序实现。 -
provider- 提供程序。 -
type- 证书类型。
-
-
Method Details
-
getInstance
返回实现指定证书类型的证书工厂对象。此方法遍历注册的安全提供程序列表,从最优先的提供程序开始。返回封装了支持指定类型的第一个提供程序的CertificateFactorySpi实现的新CertificateFactory对象。
请注意,注册的提供程序列表可以通过
Security.getProviders()方法检索。- 实现注意:
-
JDK参考实现另外使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()返回的提供程序顺序不同。 - 参数:
-
type- 请求的证书类型的名称。有关标准证书类型的信息,请参阅Java安全标准算法名称规范中的CertificateFactory部分。 - 返回:
- 指定类型的证书工厂对象
- 抛出:
-
CertificateException- 如果没有Provider支持指定类型的CertificateFactorySpi实现 -
NullPointerException- 如果type为null - 参见:
-
getInstance
public static final CertificateFactory getInstance(String type, String provider) throws CertificateException, NoSuchProviderException 返回指定证书类型的证书工厂对象。返回封装了来自指定提供程序的CertificateFactorySpi实现的新CertificateFactory对象。指定的提供程序必须在安全提供程序列表中注册。
请注意,注册的提供程序列表可以通过
Security.getProviders()方法检索。- 参数:
-
type- 证书类型。有关标准证书类型的信息,请参阅Java安全标准算法名称规范中的CertificateFactory部分。 -
provider- 提供程序的名称。 - 返回:
- 指定类型的证书工厂对象
- 抛出:
-
CertificateException- 如果指定提供程序中不可用指定算法的CertificateFactorySpi实现 -
IllegalArgumentException- 如果提供程序名称为null或为空 -
NoSuchProviderException- 如果指定提供程序未在安全提供程序列表中注册 -
NullPointerException- 如果type为null - 参见:
-
getInstance
public static final CertificateFactory getInstance(String type, Provider provider) throws CertificateException 返回指定证书类型的证书工厂对象。返回封装了来自指定Provider对象的CertificateFactorySpi实现的新CertificateFactory对象。请注意,指定的Provider对象不必在提供程序列表中注册。
- 参数:
-
type- 证书类型。有关标准证书类型的信息,请参阅Java安全标准算法名称规范中的CertificateFactory部分。 -
provider- 提供程序。 - 返回:
- 指定类型的证书工厂对象
- 抛出:
-
CertificateException- 如果指定Provider对象中不可用指定算法的CertificateFactorySpi实现 -
IllegalArgumentException- 如果提供程序为null -
NullPointerException- 如果type为null - 自版本:
- 1.4
- 参见:
-
getProvider
返回此证书工厂的提供程序。- 返回:
- 此证书工厂的提供程序。
-
getType
返回与此证书工厂关联的证书类型的名称。- 返回值:
- 与此证书工厂关联的证书类型的名称。
-
generateCertificate
生成一个证书对象,并使用从输入流inStream读取的数据进行初始化。为了利用此证书工厂支持的专用证书格式,返回的证书对象可以强制转换为相应的证书类。例如,如果此证书工厂实现了X.509证书,返回的证书对象可以强制转换为
X509Certificate类。对于X.509证书的证书工厂,
inStream中提供的证书必须是DER编码的,并且可以以二进制或可打印(Base64)编码提供。如果证书以Base64编码提供,必须在开头用-----BEGIN CERTIFICATE-----界定,并且在结尾用-----END CERTIFICATE-----界定。请注意,如果给定的输入流不支持
mark和reset,此方法将消耗整个输入流。否则,每次调用此方法都会消耗一个证书,并且输入流的读取位置将定位到固有的证书结束标记之后的下一个可用字节。如果输入流中的数据不包含固有的证书结束标记(除了EOF)并且在解析证书后存在尾随数据,则会抛出CertificateException。- 参数:
-
inStream- 包含证书数据的输入流。 - 返回值:
- 一个使用来自输入流的数据初始化的证书对象。
- 抛出:
-
CertificateException- 解析错误。
-
getCertPathEncodings
返回此证书工厂支持的CertPath编码的迭代,首先是默认编码。有关标准编码名称及其格式的信息,请参阅Java安全标准算法名称规范中的CertPath编码部分。尝试通过其
remove方法修改返回的Iterator会导致UnsupportedOperationException。- 返回值:
-
一个
Iterator,用于支持的CertPath编码的名称(作为String) - 自:
- 1.4
-
generateCertPath
生成一个CertPath对象,并使用从InputStreaminStream读取的数据进行初始化。假定数据采用默认编码。默认编码的名称是由getCertPathEncodings方法返回的Iterator的第一个元素。- 参数:
-
inStream- 包含数据的InputStream - 返回值:
-
一个使用来自
InputStream的数据初始化的CertPath - 抛出:
-
CertificateException- 解码时发生异常 - 自:
- 1.4
-
generateCertPath
public final CertPath generateCertPath(InputStream inStream, String encoding) throws CertificateException 生成一个CertPath对象,并使用从InputStreaminStream读取的数据进行初始化。假定数据采用指定的编码。有关标准编码名称及其格式的信息,请参阅Java安全标准算法名称规范中的CertPath编码部分。- 参数:
-
inStream- 包含数据的InputStream -
encoding- 用于数据的编码 - 返回值:
-
一个使用来自
InputStream的数据初始化的CertPath - 抛出:
-
CertificateException- 解码时发生异常或请求的编码不受支持 - 自:
- 1.4
-
generateCertPath
public final CertPath generateCertPath(List<? extends Certificate> certificates) throws CertificateException 生成一个CertPath对象,并使用List中的Certificate列表进行初始化。提供的证书必须是
CertificateFactory支持的类型。它们将从提供的List对象中复制出来。- 参数:
-
certificates- 一个Certificate列表 - 返回值:
-
使用提供的证书列表初始化的
CertPath - 抛出:
-
CertificateException- 如果发生异常 - 自:
- 1.4
-
generateCertificates
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对象,唯一重要的字段是certificates。特别地,签名和内容将被忽略。此格式允许一次下载多个证书。如果没有证书存在,则返回一个空集合。- 参数:
-
inStream- 包含证书的输入流。 - 返回值:
- 一个(可能为空的)集合视图,其中包含使用来自输入流的数据初始化的java.security.cert.Certificate对象。
- 抛出:
-
CertificateException- 解析错误。
-
generateCRL
生成一个证书吊销列表(CRL)对象,并使用从输入流inStream读取的数据进行初始化。为了利用此证书工厂支持的专用CRL格式,返回的CRL对象可以强制转换为相应的CRL类。例如,如果此证书工厂实现了X.509 CRLs,返回的CRL对象可以强制转换为
X509CRL类。请注意,如果给定的输入流不支持
mark和reset,此方法将消耗整个输入流。否则,每次调用此方法都会消耗一个CRL,并且输入流的读取位置将定位到固有的CRL结束标记之后的下一个可用字节。如果输入流中的数据不包含固有的CRL结束标记(除了EOF)并且在解析CRL后存在尾随数据,则会抛出CRLException。- 参数:
-
inStream- 包含CRL数据的输入流。 - 返回值:
- 使用来自输入流的数据初始化的CRL对象。
- 抛出:
-
CRLException- 解析错误。
-
generateCRLs
返回从给定输入流inStream读取的CRL的(可能为空的)集合视图。为了利用此证书工厂支持的专用CRL格式,返回的集合视图中的每个元素都可以强制转换为相应的CRL类。例如,如果此证书工厂实现了X.509 CRLs,返回的集合中的元素可以强制转换为
X509CRL类。对于X.509 CRLs的证书工厂,
inStream可能包含一系列DER编码的CRLs。此外,inStream可能包含一个PKCS#7 CRL集。这是一个PKCS#7 SignedData对象,唯一重要的字段是crls。特别地,签名和内容将被忽略。此格式允许一次下载多个CRL。如果没有CRL存在,则返回一个空集合。- 参数:
-
inStream- 包含CRL的输入流。 - 返回值:
- 一个(可能为空的)集合视图,其中包含使用来自输入流的数据初始化的java.security.cert.CRL对象。
- 抛出:
-
CRLException- 解析错误。
-