Module java.base

Class CertPath

java.lang.Object
java.security.cert.CertPath
所有已实现的接口:
Serializable

public abstract class CertPath extends Object implements Serializable
一系列证书的不可变序列(认证路径)。

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

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

类型是一个String,用于标识认证路径中的Certificate类型。对于认证路径certPath中的每个证书cert,必须满足cert.getType().equals(certPath.getType())true

Certificate列表是一个有序的零个或多个CertificateList。这个List和其中包含的所有Certificate必须是不可变的。

每个CertPath对象必须支持一个或多个编码,以便将对象转换为字节数组,以便存储或传输给其他方。最好,这些编码应该是有文档记录的标准(如PKCS#7)。CertPath支持的编码之一被视为默认编码。如果没有明确请求编码(例如对于getEncoded()方法),则使用此编码。

所有CertPath对象也都是Serializable的。在序列化期间,CertPath对象会被解析为一个替代的CertPathRep对象。这允许将CertPath对象序列化为等效表示,而不考虑其底层实现。

CertPath对象可以使用CertificateFactory创建,也可以由其他类返回,例如CertPathBuilder

按照惯例,X.509 CertPath(由X509Certificate组成)的顺序从目标证书开始,以信任锚点颁发的证书结束。也就是说,一个证书的颁发者是下一个证书的主题。不应在认证路径中包含代表TrustAnchor的证书。未经验证的X.509 CertPath可能不遵循这些约定。PKIX CertPathValidator将检测任何违反这些约定导致认证路径无效的情况,并抛出CertPathValidatorException

Java平台的每个实现都必须支持以下标准CertPath编码:

  • PKCS7
  • PkiPath
这些编码在Java安全标准算法名称规范的CertPath Encodings部分中有描述。请查阅您的实现的发布文档,以查看是否支持其他编码。

并发访问

所有CertPath对象必须是线程安全的。也就是说,多个线程可以同时在单个CertPath对象(或多个对象)上调用此类中定义的方法,而不会产生任何不良影响。对于CertPath.getCertificates返回的List也是如此。

要求CertPath对象是不可变的和线程安全的,允许它们传递给各种代码片段而无需担心协调访问。提供这种线程安全通常并不困难,因为涉及的CertPathList对象都是不可变的。

自从:
1.4
参见:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static class 
    用于序列化的替代CertPath类。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    CertPath(String type)
    创建指定类型的CertPath
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    equals(Object other)
    将此认证路径与指定对象进行相等性比较。
    abstract List<? extends Certificate>
    返回此认证路径中的证书列表。
    abstract byte[]
    返回此认证路径的编码形式,使用默认编码。
    abstract byte[]
    getEncoded(String encoding)
    返回此认证路径的编码形式,使用指定的编码。
    abstract Iterator<String>
    返回此认证路径支持的编码的迭代器,首先是默认编码。
    返回此认证路径中的Certificate类型。
    int
    返回此认证路径的哈希码。
    返回此认证路径的字符串表示形式。
    protected Object
    用包含Certificate类型和CertPath的编码字节的CertPathRep对象替换要序列化的CertPath

    Methods declared in class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • CertPath

      protected CertPath(String type)
      创建指定类型的CertPath

      此构造函数是受保护的,因为大多数用户应该使用CertificateFactory来创建CertPath

      参数:
      type - 此路径中Certificate类型的标准名称
  • Method Details

    • getType

      public String getType()
      返回此认证路径中的Certificate类型。这与认证路径中所有Certificatecert.getType()返回的字符串相同。
      返回:
      此认证路径中的Certificate类型(永不为null)
    • getEncodings

      public abstract Iterator<String> getEncodings()
      返回此认证路径支持的编码的迭代器,首先是默认编码。尝试通过其remove方法修改返回的Iterator会导致UnsupportedOperationException
      返回:
      支持的编码名称(作为字符串)的Iterator
    • equals

      public boolean equals(Object other)
      将此认证路径与指定对象进行相等性比较。当且仅当它们的类型相等且它们的证书List(以及由此推断出的List中的Certificate)相等时,两个CertPath才相等。一个CertPath永远不会等于不是CertPath的对象。

      此算法由此方法实现。如果被覆盖,必须保持此处指定的行为。

      覆盖:
      equals 在类 Object
      参数:
      other - 用于与此认证路径进行相等性测试的对象
      返回:
      如果指定对象等于此认证路径,则为true;否则为false
      参见:
    • hashCode

      public int hashCode()
      返回此认证路径的哈希码。认证路径的哈希码定义为以下计算结果:
      
        hashCode = path.getType().hashCode();
        hashCode = 31*hashCode + path.getCertificates().hashCode();
       
      这确保了path1.equals(path2)意味着对于任何两个认证路径path1path2path1.hashCode()==path2.hashCode(),这是Object.hashCode的一般契约所要求的。
      覆盖:
      hashCode 在类 Object
      返回:
      此认证路径的哈希码值
      参见:
    • toString

      public String toString()
      返回此认证路径的字符串表示形式。这会调用路径中每个CertificatetoString方法。
      覆盖:
      toString 在类 Object
      返回:
      此认证路径的字符串表示形式
    • 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,包含Certificate(可能为空,但不为null)
    • writeReplace

      protected Object writeReplace() throws ObjectStreamException
      用包含Certificate类型和CertPath的编码字节的CertPathRep对象替换要序列化的CertPath
      返回:
      一个包含Certificate类型和CertPath编码字节的CertPathRep
      抛出:
      ObjectStreamException - 如果无法创建代表此认证路径的CertPathRep对象