- java.lang.Object
-
- java.security.cert.CertPath
-
- All Implemented Interfaces:
-
Serializable
public abstract class CertPath extends Object implements Serializable
证书的不可变序列(认证路径)。这是一个抽象类,它定义了所有
CertPath的共同方法。 子类可以处理不同类型的证书(X.509,PGP等)。所有
CertPath对象都有一个类型,一个Certificates的列表,以及一个或多个支持的编码。 因为CertPath类是不可变的,所以在CertPath,CertPath不能以任何外部可见的方式改变。 这个规定适用于这个类的所有公共领域和方法,以及任何由子类添加或覆盖的规则。类型是
String标识的类型CertificateS IN的证书路径。 对于每个证书cert证书路径certPath,cert.getType().equals(certPath.getType())必须是true。Certificate的列表是List的零或多个Certificate的有序List。 这个List和Certificate包含的所有List都必须是不可变的。每个
CertPath对象必须支持一个或多个编码,以便将对象转换为字节数组以存储或传输给其他方。 优选地,这些编码应该是有良好记录的标准(例如PKCS#7)。CertPath支持的编码CertPath被认为是默认编码。 如果没有显式请求编码,则使用此编码(例如,对于getEncoded()方法)。全部
CertPath对象也是Serializable。CertPath对象在序列化期间被解析为备用的CertPathRep对象。 这允许将CertPath对象序列化为等效表示,而不管其底层实现。可以使用
CertificateFactory创建CertPath对象,或者可以由其他类返回,如CertPathBuilder。按照惯例,X.509
CertPathS(由X509CertificateS),是有序开头的目标,证书和与信任锚颁发的证书结束。 也就是说,一个证书的颁发者是下面的一个证书的主题。 代表TrustAnchor的证书不应包含在认证路径中。 未验证X.509CertPath可能不遵循这些约定。 PKIXCertPathValidator将检测到这些约定的任何偏离,导致认证路径无效并抛出一个CertPathValidatorException。Java平台的每个实现都需要支持以下标准
CertPath编码:-
PKCS7 -
PkiPath
并发访问
所有
CertPath对象必须是线程安全的。 也就是说,多个线程可以在单个CertPath对象(或多个)上同时调用此类中定义的方法,而不会产生不良影响。 对于List返回的CertPath.getCertificates也是如此。要求
CertPath对象是不可变的和线程安全的,可以让它们传递到各种代码,而不用担心协调访问。 提供这种线程安全性通常并不困难,因为所CertPath和List对象是不可变的。- 从以下版本开始:
- 1.4
- 另请参见:
-
CertificateFactory,CertPathBuilder, Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 protected static classCertPath.CertPathRep替代CertPath类用于序列化。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 booleanequals(Object other)将此认证路径与指定的对象进行比较。abstract List<? extends Certificate>getCertificates()返回此认证路径中的证书列表。abstract byte[]getEncoded()使用默认编码返回此认证路径的编码形式。abstract byte[]getEncoded(String encoding)使用指定的编码返回此认证路径的编码形式。abstract Iterator<String>getEncodings()返回此认证路径支持的编码的迭代,并使用默认编码。StringgetType()返回此认证路径中的Certificate的类型。inthashCode()返回此认证路径的哈希码。StringtoString()返回此认证路径的字符串表示形式。protected ObjectwriteReplace()替换CertPath以使用CertPathRep对象进行序列化。
-
-
-
构造方法详细信息
-
CertPath
protected CertPath(String type)
创建指定类型的CertPath。此构造函数受到保护,因为大多数用户应使用
CertificateFactory创建CertPath。- 参数
-
type- 此路径中Certificate的类型的标准名称
-
-
方法详细信息
-
getType
public String getType()
返回此认证路径中的Certificate的类型。 这是cert.getType()对于认证路径中所有Certificate都将返回的字符串。- 结果
-
该认证路径中的类型为
Certificate(从不为null)
-
getEncodings
public abstract Iterator<String> getEncodings()
返回此认证路径支持的编码的迭代,并使用默认编码。 尝试通过其remove方法修改返回的Iterator产生一个UnsupportedOperationException。- 结果
-
一个
Iterator的支持编码的名称(作为字符串)
-
equals
public boolean equals(Object other)
将此认证路径与指定的对象进行比较。 两个CertPath在相同的情况下是相等的,如果他们的类型相同,并且他们的证书List(并且暗示Certificate的List)相等。 ACertPath从不等于不是CertPath的对象。该算法由该方法实现。 如果被覆盖,则必须维护此处指定的行为。
- 重写:
-
equals在Object - 参数
-
other- 要与此认证路径相等的对象 - 结果
- 如果指定的对象等于此认证路径,则为true,否则为false
- 另请参见:
-
Object.hashCode(),HashMap
-
hashCode
public int hashCode()
返回此认证路径的哈希码。 认证路径的哈希码被定义为以下计算的结果:这确保hashCode = path.getType().hashCode(); hashCode = 31*hashCode + path.getCertificates().hashCode();path1.equals(path2)意味着path1.hashCode()==path2.hashCode()的任何两个认证路径,path1和path2,根据path2的一般合同Object.hashCode。- 重写:
-
hashCode在类Object - 结果
- 该认证路径的哈希码值
- 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
toString
public String toString()
返回此认证路径的字符串表示形式。 这将调用toString在每个方法CertificateS IN的路径。
-
getEncoded
public abstract byte[] getEncoded() throws CertificateEncodingException使用默认编码返回此认证路径的编码形式。- 结果
- 编码字节
- 异常
-
CertificateEncodingException- 如果发生编码错误
-
getEncoded
public abstract byte[] getEncoded(String encoding) throws CertificateEncodingException
使用指定的编码返回此认证路径的编码形式。- 参数
-
encoding- 要使用的编码的名称 - 结果
- 编码字节
- 异常
-
CertificateEncodingException- 如果发生编码错误或不支持请求的编码
-
getCertificates
public abstract List<? extends Certificate> getCertificates()
返回此认证路径中的证书列表。 返回的List必须是不可变的和线程安全的。- 结果
-
一个不可变的
List的Certificates(可能为空,但不为null)
-
writeReplace
protected Object writeReplace() throws ObjectStreamException
将CertPath替换为CertPathRep对象进行序列化。- 结果
-
CertPathRep要序列化 - 异常
-
ObjectStreamException- 如果无法创建表示此认证路径的对象CertPathRep
-
-