3.5.2 CertificateFactory
CertificateFactory类是一个引擎类,我们称它为证书工厂,可以通过它将证书导入程序中。
/此类定义了用于从相关的编码中生成证书、证书路径(CertPath)和证书撤销列表(CRL)对象的CertificateFactory功能。/
public class CertificateFactory
extends Object
❑方法详述
可通过以下getInstance()工厂方法获得实例化对象:
//返回实现指定证书类型的CertificateFactory对象。
public final static CertificateFactory getInstance(String type)
//返回指定证书类型的CertificateFactory对象。
public final static CertificateFactory getInstance(String type, Provider provider)
//返回指定证书类型的CertificateFactory对象。
public final static CertificateFactory getInstance(String type, String provider)
可以通过CertificateFactory类生成证书:
//生成一个证书对象,并使用从输入流inStream中读取的数据对它进行初始化。
public final Certificate generateCertificate(InputStream inStream)
//返回从给定输入流inStream中读取的证书的集合视图(可能为空)。
public final Collection<?extends Certificate>generateCertificates(InputStream inStream)
也可以通过CertificateFactory类生成证书路径。
以下方法可以通过输入流获得证书路径:
/生成一个CertPath对象,并使用从InputStream inStream中读取的数据对它进行初始化。/
public final CertPath generateCertPath(InputStream inStream)
/生成一个CertPath对象,并使用从InputStream inStream中读取的数据对它进行初始化。/
public final CertPath generateCertPath(InputStream inStream, String encoding)
我们也可以通过如下方法生成一个正式路径:
/生成一个CertPath对象,并使用一个Certificate的List对它进行初始化。/
public final CertPath generateCertPath(List<?extends Certificate>certificates)
还可以通过CertificateFactory类生成证书撤销列表:
/生成一个证书撤销列表(CRL)对象,并使用从输入流inStream中读取的数据对它进行初始化。/
public final CRL generateCRL(InputStream inStream)
/返回从给定输入流inStream中读取的CRL的集合视图(可能为空)。/
public final Collection<?extends CRL>generateCRLs(InputStream inStream)
此外,CertificateFactory类还提供了以下方法:
/返回此CertificateFactory支持的CertPath编码的迭代器,默认编码方式优先。/
public final Iterator<String>getCertPathEncodings()
//返回此CertificateFactory的提供者。
public final Provider getProvider()
//返回与此CertificateFactory相关联的证书类型的名称。
public final String getType()
❑实现示例
如果我们已知待载入证书的类型,就可通过代码清单3-21获得证书对象。
代码清单3-21 加载证书
//实例化,并指明证书类型为"X.509"。
CertificateFactory certificateFactory=CertificateFactory.getInstance("X.509");
//获得证书输入流
FileInputStream in=new FileInputStream("D:\x.keystore");
//获得证书
Certificate certificate=certificateFactory.generateCertificate(in);
//关闭流
in.close();