模块 java.base

类 X509Certificate

java.lang.Object
javax.security.cert.Certificate
javax.security.cert.X509Certificate

@Deprecated (since ="9", forRemoval =true) public abstract class X509Certificate extends Certificate
已弃用,将被删除:此 API 元素可能会在未来版本中删除。
请改用 java.security.cert 中的类。
X.509 v1 证书的抽象类。这提供了一种访问 X.509 证书的所有版本 1 属性的标准方法。特定于 X.509 v2 或 v3 的属性不能通过此接口使用。未来的 API 发展将提供对完整 X.509 v3 属性的完全访问。

基本 X.509 格式由 ISO/IEC 和 ANSI X9 定义,并在 ASN.1 中描述如下:

 Certificate ::= SEQUENCE {
   tbsCertificate    TBSCertificate,
   signatureAlgorithm  AlgorithmIdentifier,
   signature      BIT STRING }
 

这些证书广泛用于支持 Internet 安全系统中的身份验证和其他功能。常见应用程序包括隐私增强邮件 (PEM)、传输层安全 (SSL)、可信软件分发的代码签名和安全电子交易 (SET)。

这些证书由 Certificate Authorities (CA) 管理和担保。 CA 是通过以 X.509 标准格式放置数据然后对该数据进行数字签名来创建证书的服务。 CA 充当受信任的第三方,在彼此不直接了解的委托人之间进行介绍。 CA 证书要么由它们自己签名,要么由其他一些 CA(例如“根”CA)签名。

tbsCertificate 的 ASN.1 定义是:

 TBSCertificate ::= SEQUENCE {
   version     [0] EXPLICIT Version DEFAULT v1,
   serialNumber     CertificateSerialNumber,
   signature      AlgorithmIdentifier,
   issuer        Name,
   validity       Validity,
   subject       Name,
   subjectPublicKeyInfo SubjectPublicKeyInfo,
   }
 

以下是实例化 X.509 证书的示例代码:

 InputStream inStream = new FileInputStream("fileName-of-cert");
 X509Certificate cert = X509Certificate.getInstance(inStream);
 inStream.close();
 
 byte[] certData = <certificate read from a file, say>
 X509Certificate cert = X509Certificate.getInstance(certData);
 

在任何一种情况下,实例化 X.509 证书的代码都会参考 cert.provider.x509v1 安全属性的值来定位实际实现或实例化默认实现。

cert.provider.x509v1 属性设置为 X.509 的默认实现,例如:

 cert.provider.x509v1=com.sun.security.cert.internal.x509.X509V1CertImpl
 

必须更改此 cert.provider.x509v1 属性的值以实例化另一个实现。如果未设置此安全属性,将使用默认实现。目前,由于对 Security 属性的访问可能存在安全限制,因此在类初始化时查找并缓存此值,如果无法访问 Security 属性,将回退到默认实现。

Note: The classes in the package javax.security.cert exist for compatibility with earlier versions of the Java Secure Sockets Extension (JSSE). New applications should instead use the standard Java SE certificate classes located in java.security.cert .

自从:
1.4
参见:
  • 构造方法总结

    构造方法
    构造方法
    描述
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    子类调用的构造方法。
  • 方法总结

    修饰符和类型
    方法
    描述
    abstract void
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    检查证书当前是否有效。
    abstract void
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    检查指定的日期是否在证书的有效期内。
    static final X509Certificate
    getInstance(byte[] certData)
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    实例化 X509Certificate 对象,并使用指定的字节数组对其进行初始化。
    static final X509Certificate
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    实例化 X509Certificate 对象,并使用从输入流 inStream 读取的数据对其进行初始化。
    abstract Principal
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书中获取 issuer(颁发者专有名称)值。
    abstract Date
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书的有效期中获取notAfter 日期。
    abstract Date
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书的有效期中获取notBefore 日期。
    abstract BigInteger
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书中获取 serialNumber 值。
    abstract String
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    获取证书签名算法的签名算法名称。
    abstract String
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书中获取签名算法 OID 字符串。
    abstract byte[]
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从此证书的签名算法中获取 DER 编码的签名算法参数。
    abstract Principal
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书中获取 subject(使用者专有名称)值。
    abstract int
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    从证书中获取 version(版本号)值。

    在类 javax.security.cert.Certificate 中声明的方法

    equals, getEncoded, getPublicKey, hashCode, toString, verify, verify

    在类 java.lang.Object 中声明的方法

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • 构造方法详细信息

    • X509Certificate

      public X509Certificate()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      子类调用的构造方法。
  • 方法详情

    • getInstance

      public static final X509Certificate  getInstance(InputStream  inStream) throws CertificateException
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      实例化 X509Certificate 对象,并使用从输入流 inStream 读取的数据对其进行初始化。实现(X509Certificate 是一个抽象类)由指定为 cert.provider.x509v1 安全属性值的类提供。

      注意:输入流中预计只有一个 DER 编码证书。此外,所有 X509Certificate 子类都必须提供以下形式的构造方法:

      
       public <subClass>(InputStream inStream) ...
        
      参数:
      inStream - 一个输入流,其中包含要读取的数据以初始化证书。
      返回:
      使用输入流中的数据初始化的 X509Certificate 对象。
      抛出:
      CertificateException - 如果发生类初始化或证书解析错误。
    • getInstance

      public static final X509Certificate  getInstance(byte[] certData) throws CertificateException
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      实例化 X509Certificate 对象,并使用指定的字节数组对其进行初始化。实现(X509Certificate 是一个抽象类)由指定为 cert.provider.x509v1 安全属性值的类提供。

      注意:所有 X509Certificate 子类都必须提供以下形式的构造方法:

      
       public <subClass>(InputStream inStream) ...
        
      参数:
      certData - 包含 DER 编码证书的字节数组。
      返回:
      使用来自 certData 的数据初始化的 X509Certificate 对象。
      抛出:
      CertificateException - 如果发生类初始化或证书解析错误。
    • checkValidity

      public abstract void checkValidity() throws CertificateExpiredException , CertificateNotYetValidException
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      检查证书当前是否有效。如果当前日期和时间在证书中给出的有效期内。

      有效期由两个日期/时间值组成:证书有效的第一个和最后一个日期(和时间)。它在 ASN.1 中定义为:

       validity       Validity
      
       Validity ::= SEQUENCE {
         notBefore   CertificateValidityDate,
         notAfter    CertificateValidityDate }
      
       CertificateValidityDate ::= CHOICE {
         utcTime    UTCTime,
         generalTime  GeneralizedTime }
       
      抛出:
      CertificateExpiredException - 如果证书已过期。
      CertificateNotYetValidException - 如果证书尚未生效。
    • checkValidity

      public abstract void checkValidity(Date  date) throws CertificateExpiredException , CertificateNotYetValidException
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      检查指定的日期是否在证书的有效期内。换句话说,这决定了证书在指定的日期/时间是否有效。
      参数:
      date - 检查该证书在该日期/时间是否有效的日期。
      抛出:
      CertificateExpiredException - 如果证书相对于提供的 date 已过期。
      CertificateNotYetValidException - 如果证书相对于提供的 date 尚未生效。
      参见:
    • getVersion

      public abstract int getVersion()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书中获取 version(版本号)值。 ASN.1 对此的定义是:
       version     [0] EXPLICIT Version DEFAULT v1
      
       Version ::= INTEGER { v1(0), v2(1), v3(2) }
       
      返回:
      来自 ASN.1 编码的版本号,即 0、1 或 2。
    • getSerialNumber

      public abstract BigInteger  getSerialNumber()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书中获取 serialNumber 值。序列号是证书颁发机构分配给每个证书的整数。对于给定 CA 颁发的每个证书,它必须是唯一的(即,颁发者名称和序列号标识一个唯一的证书)。 ASN.1 对此的定义是:
       serialNumber   CertificateSerialNumber
      
       CertificateSerialNumber ::= INTEGER
       
      返回:
      序列号。
    • getIssuerDN

      public abstract Principal  getIssuerDN()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书中获取 issuer(颁发者专有名称)值。颁发者名称标识签署(和颁发)证书的实体。

      颁发者名称字段包含一个 X.500 专有名称 (DN)。 ASN.1 对此的定义是:

       issuer  Name
      
       Name ::= CHOICE { RDNSequence }
       RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
       RelativeDistinguishedName ::=
         SET OF AttributeValueAssertion
      
       AttributeValueAssertion ::= SEQUENCE {
                      AttributeType,
                      AttributeValue }
       AttributeType ::= OBJECT IDENTIFIER
       AttributeValue ::= ANY
       
      Name 描述了一个由属性组成的分层名称,例如国家名称和相应的值,例如美国。 AttributeValue 组件的类型由 AttributeType 确定;一般来说,它将是一个 directoryStringdirectoryString 通常是 PrintableStringTeletexStringUniversalString 之一。
      返回:
      一个 Principal,其名称是发行者的专有名称。
    • getSubjectDN

      public abstract Principal  getSubjectDN()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书中获取 subject(使用者专有名称)值。 ASN.1 对此的定义是:
       subject  Name
       

      有关 Name 和其他相关定义,请参见 getIssuerDN

      返回:
      名称为主题名称的 Principal。
      参见:
    • getNotBefore

      public abstract Date  getNotBefore()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书的有效期中获取notBefore 日期。相关的 ASN.1 定义是:
       validity       Validity
      
       Validity ::= SEQUENCE {
         notBefore   CertificateValidityDate,
         notAfter    CertificateValidityDate }
      
       CertificateValidityDate ::= CHOICE {
         utcTime    UTCTime,
         generalTime  GeneralizedTime }
       
      返回:
      有效期的开始日期。
      参见:
    • getNotAfter

      public abstract Date  getNotAfter()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书的有效期中获取notAfter 日期。有关 ASN.1 的相关定义,请参阅 getNotBefore
      返回:
      有效期的结束日期。
      参见:
    • getSigAlgName

      public abstract String  getSigAlgName()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      获取证书签名算法的签名算法名称。一个例子是字符串“SHA-1/DSA”。 ASN.1 对此的定义是:
       signatureAlgorithm  AlgorithmIdentifier
      
       AlgorithmIdentifier ::= SEQUENCE {
         algorithm        OBJECT IDENTIFIER,
         parameters       ANY DEFINED BY algorithm OPTIONAL }
                     -- contains a value of the type
                     -- registered for use with the
                     -- algorithm object identifier value
       

      算法名称由 algorithmOID 字符串确定。

      返回:
      签名算法名称。
    • getSigAlgOID

      public abstract String  getSigAlgOID()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从证书中获取签名算法 OID 字符串。 OID 由一组由句点分隔的正整数表示。例如,根据 PKIX 第 I 部分,字符串“1.2.840.10040.4.3”使用 DSA 签名算法标识 SHA-1。

      有关 ASN.1 的相关定义,请参阅 getSigAlgName

      返回:
      签名算法OID字符串。
    • getSigAlgParams

      public abstract byte[] getSigAlgParams()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      从此证书的签名算法中获取 DER 编码的签名算法参数。大多数情况下,签名算法参数为空;这些参数通常与证书的公钥一起提供。

      有关 ASN.1 的相关定义,请参阅 getSigAlgName

      返回:
      DER 编码的签名算法参数,如果没有参数则为 null。