Module  java.base
软件包  java.security.cert

Class CertPath

  • All Implemented Interfaces:
    Serializable


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

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

    所有CertPath对象都有一个类型,一个Certificate s的列表,以及一个或多个支持的编码。 因为CertPath类是不可变的,所以在CertPathCertPath不能以任何外部可见的方式改变。 这个规定适用于这个类的所有公共领域和方法,以及任何由子类添加或覆盖的规则。

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

    Certificate的列表是List的零或多个Certificate的有序List 这个ListCertificate包含的所有List都必须是不可变的。

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

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

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

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

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

        public boolean equals​(Object other)
        将此认证路径与指定的对象进行比较。 两个CertPath在相同的情况下是相等的,如果他们的类型相同,并且他们的证书List (并且暗示CertificateList )相等。 A CertPath从不等于不是CertPath的对象。

        该算法由该方法实现。 如果被覆盖,则必须维护此处指定的行为。

        重写:
        equalsObject
        参数
        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
        重写:
        hashCode在类 Object
        结果
        该认证路径的哈希码值
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • toString

        public String toString​()
        返回此认证路径的字符串表示形式。 这将调用toString在每个方法Certificate S IN的路径。
        重写:
        toStringObject
        结果
        该认证路径的字符串表示形式
      • 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