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();