模块  java.base
软件包  java.security.cert

Class CertPath

  • 实现的所有接口
    Serializable

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

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

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

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

    Certificate的列表是零或更多Certificate的订购List List及其中包含的所有Certificate必须是不可变的。

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

    所有CertPath项目也是Serializable 在序列化期间, CertPath对象被解析为备用CertPathRep对象。 这允许将CertPath对象序列化为等效表示,而不管其底层实现如何。

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

    按照惯例,X.509 CertPath S(由X509Certificate S),是有序开头的目标,证书和与信任锚颁发的证书结束。 也就是说,一个证书的发行者是下一个证书的主题。 代表TrustAnchor的证书不应包含在认证路径中。 未经验证的X.509 CertPath可能不遵循这些约定。 PKIX CertPathValidator s将检测导致认证路径无效的这些约定的任何偏离并抛出CertPathValidatorException

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

    • PKCS7
    • PkiPath
    这些编码在Java安全标准算法名称规范的CertPath Encodings section中描述。 请参阅实施的发行文档,以了解是否支持任何其他编码。

    并发访问

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

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

    从以下版本开始:
    1.4
    另请参见:
    CertificateFactoryCertPathBuilderSerialized Form
    • 构造方法详细信息

      • CertPath

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

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

        参数
        type - 此路径中 Certificate类型的标准名称
    • 方法详细信息

      • getType

        public String getType()
        返回此证书路径中Certificate的类型。 这与cert.getType()为证书路径中的所有Certificate返回的字符串相同。
        结果
        此证书路径中 Certificate的类型(永不为空)
      • getEncodings

        public abstract Iterator<String> getEncodings()
        返回此证书路径支持的编码的迭代,首先使用默认编码。 尝试通过其remove方法修改返回的Iterator ,结果为UnsupportedOperationException
        结果
        一个 Iterator在支持的编码的名称上(作为字符串)
      • equals

        public boolean equals​(Object other)
        将此证书路径与指定对象进行相等性比较。 两个CertPath是相等的,当且仅当它们的类型相等且它们的证书List s(并暗示Certificate s中的List s)相等时。 CertPath永远不会等于不是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()用于任何两个认证路径path1path2 ,如path2的一般合同所Object.hashCode
        重写:
        hashCodeObject
        结果
        此证书路径的哈希码值
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • toString

        public String toString()
        返回此证书路径的字符串表示形式。 这将调用toString在每个方法Certificate S IN的路径。
        重写:
        toString在类 Object
        结果
        此证书路径的字符串表示形式
      • getEncoded

        public abstract byte[] getEncoded​(String encoding)
                                   throws CertificateEncodingException
        使用指定的编码返回此证书路径的编码形式。
        参数
        encoding - 要使用的编码的名称
        结果
        编码的字节
        异常
        CertificateEncodingException - 如果发生编码错误或不支持所请求的编码
      • getCertificates

        public abstract List<? extends Certificate> getCertificates()
        返回此证书路径中的证书列表。 返回的List必须是不可变的和线程安全的。
        结果
        一个不可变的 ListCertificate s(可能是空的,但不是null)
      • writeReplace

        protected Object writeReplace()
                               throws ObjectStreamException
        CertPath替换为 CertPathRep对象的序列化。
        结果
        要序列化的 CertPathRep
        异常
        ObjectStreamException - 如果无法创建表示此证书路径的 CertPathRep对象