Module java.base

Class X509Certificate

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

@Deprecated(since="9", forRemoval=true) public abstract class X509Certificate extends Certificate
Deprecated, for removal: This API element is subject to removal in a future version.
Use the classes in java.security.cert instead.
X.509 v1证书的抽象类。这提供了一种标准的方式来访问X.509证书的所有版本1属性。特定于X.509 v2或v3的属性不能通过此接口访问。未来的API演进将提供完整访问完整的X.509 v3属性。

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

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

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

这些证书由证书颁发机构(CAs)管理和担保。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 = <从文件中读取的证书>
 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属性的值必须更改为实例化另一个实现。如果未设置此安全属性,则将使用默认实现。当前,由于可能存在对安全属性访问的安全限制,此值在类初始化时被查找和缓存,并且如果无法访问安全属性,则会回退到默认实现。

注意:包javax.security.cert中的类存在是为了与早期版本的Java安全套接字扩展(JSSE)兼容。新应用程序应使用位于java.security.cert中的标准Java SE证书类。

自版本:
1.4
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    已弃用,将被移除:此API元素可能在将来的版本中被移除。
    子类调用的构造函数。
  • Method Summary

    Modifier and Type
    Method
    Description
    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(版本号)值。

    Methods declared in class javax.security.cert.Certificate

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

    Methods declared in class java.lang.Object

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

    • X509Certificate

      public X509Certificate()
      Deprecated, for removal: This API element is subject to removal in a future version.
      子类调用的构造函数。
  • Method Details

    • getInstance

      public static final X509Certificate getInstance(InputStream inStream) throws CertificateException
      Deprecated, for removal: This API element is subject to removal in a future version.
      实例化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
      Deprecated, for removal: This API element is subject to removal in a future version.
      实例化X509Certificate对象,并使用指定的字节数组进行初始化。实现(X509Certificate是一个抽象类)由指定为cert.provider.x509v1安全属性值的类提供。

      注意:所有X509Certificate子类必须提供以下形式的构造函数:

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

      public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
      Deprecated, for removal: This API element is subject to removal in a future version.
      检查证书当前是否有效。如果当前日期和时间在证书中给定的有效期内,则证书有效。

      有效期由两个日期/时间值组成:证书有效的第一个和最后一个日期(和时间)。在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
      Deprecated, for removal: This API element is subject to removal in a future version.
      检查指定日期是否在证书的有效期内。换句话说,这确定证书在指定日期/时间是否有效。
      参数:
      date - 要检查的日期,以查看证书在该日期/时间是否有效。
      抛出:
      CertificateExpiredException - 如果证书相对于提供的date已过期。
      CertificateNotYetValidException - 如果证书相对于提供的date尚未生效。
      参见:
    • getVersion

      public abstract int getVersion()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书中获取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()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书中获取serialNumber值。序列号是由认证机构分配给每个证书的整数。对于由特定CA签发的每个证书,它必须是唯一的(即,发行者名称和序列号标识唯一证书)。ASN.1对此的定义为:
       serialNumber     CertificateSerialNumber
      
       CertificateSerialNumber  ::=  INTEGER
       
      返回:
      序列号。
    • getIssuerDN

      public abstract Principal getIssuerDN()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书中获取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描述了由属性(例如国家名称)组成的分层名称,以及相应的值(例如US)。AttributeValue组件的类型由AttributeType确定;通常它将是一个directoryString。一个directoryString通常是PrintableStringTeletexStringUniversalString之一。
      返回:
      名称为发行者可分辨名称的主体。
    • getSubjectDN

      public abstract Principal getSubjectDN()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书中获取subject(主体可分辨名称)值。ASN.1对此的定义为:
       subject    Name
       

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

      返回:
      名称为主体名称的主体。
      另请参见:
    • getNotBefore

      public abstract Date getNotBefore()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书的有效期中获取notBefore日期。相关的ASN.1定义为:
       validity             Validity
      
       Validity ::= SEQUENCE {
           notBefore      CertificateValidityDate,
           notAfter       CertificateValidityDate }
      
       CertificateValidityDate ::= CHOICE {
           utcTime        UTCTime,
           generalTime    GeneralizedTime }
       
      返回:
      有效期的开始日期。
      另请参见:
    • getNotAfter

      public abstract Date getNotAfter()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书的有效期中获取notAfter日期。有关相关ASN.1定义,请参见getNotBefore
      返回:
      有效期的结束日期。
      另请参见:
    • getSigAlgName

      public abstract String getSigAlgName()
      Deprecated, for removal: This API element is subject to removal in a future version.
      获取证书签名算法的签名算法名称。例如,字符串为"SHA-1/DSA"。ASN.1对此的定义为:
       signatureAlgorithm   AlgorithmIdentifier
      
       AlgorithmIdentifier  ::=  SEQUENCE  {
           algorithm               OBJECT IDENTIFIER,
           parameters              ANY DEFINED BY algorithm OPTIONAL  }
                                   -- 包含用于算法对象标识符值的类型注册使用的值
       

      算法名称是从algorithm OID字符串确定的。

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

      public abstract String getSigAlgOID()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从证书中获取签名算法OID字符串。OID由一组用句点分隔的正整数表示。例如,字符串"1.2.840.10040.4.3"标识PKIX第I部分中的SHA-1与DSA签名算法。

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

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

      public abstract byte[] getSigAlgParams()
      Deprecated, for removal: This API element is subject to removal in a future version.
      从此证书的签名算法中获取DER编码的签名算法参数。在大多数情况下,签名算法参数为null;参数通常与证书的公钥一起提供。

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

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