3.5.7 CertPath

CertPath类是一个抽象类,定义了常用于所有CertPath的方法。其子类可处理不同类型的证书(X.509、PGP等)。

所有CertPath对象都包含类型、Certificate列表及其支持的一种或多种编码。由于CertPath类是不可变的,所以构造CertPath后无法以任何外部可见的方式更改它。此规定适用于此类的所有公共字段和方法,以及由子类添加或重写的所有公共字段和方法。


//不可变的证书序列(证书路径)。

public abstract class CertPath

extends Object

implements Serializable


❑方法详述

CertPath类要求子类实现如下方法。

我们可以通过以下方法获得该证书路径的证书列表:


//返回此证书路径中的证书列表。

public abstract List<?extends Certificate>getCertificates()


以下方法可以获得证书路径二进制信息和编码信息:


//返回此证书路径的编码形式,使用默认的编码。

public abstract byte[]getEncoded()

//返回此证书路径的编码形式,使用指定的编码。

public abstract byte[]getEncoded(String encoding)

//返回此证书路径支持的编码的迭代,默认编码方式优先。

public abstract Iterator<String>getEncodings()


CertPath类实现了以下方法获得证书类型:


//返回此证书路径中的Certificate类型,如X.509。

public String getType()


此外,CertPath类覆盖了以下方法:


//比较此证书路径与指定对象的相等性。

public boolean equals(Object other)

//返回此证书路径的散列码。

public int hashCode()

//返回此证书路径的字符串表示形式。

public String toString()


❑实现示例

我们可以通过代码清单3-25获得证书链。

代码清单3-25 获得证书链


//实例化CertificateFactory对象,并指明证书类型为"X.509"。

CertificateFactory certificateFactory=CertificateFactory.getInstance("X.509");

//获得证书输入流

FileInputStream in=new FileInputStream("D:\x.keystore");

//获得CertPath对象

CertPath certPath=certificateFactory.generateCertPath(in);

//关闭流

in.close();


CertPath类作为证书链,它的操作离不开CertPathBuilder类和CertPathValidator类。有兴趣的读者请参考相应的Java API内容。