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

Class X509Certificate

  • 实现的所有接口
    SerializableX509Extension

    public abstract class X509Certificate
    extends Certificate
    implements X509Extension

    X.509证书的抽象类。 这提供了访问X.509证书的所有属性的标准方法。

    1996年6月,基本的X.509 v3格式由ISO / IEC和ANSI X9完成,下面在ASN.1中描述:

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

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

    这些证书由证书颁发机构 (CA)管理和担保。 CA是通过将数据置于X.509标准格式然后对该数据进行数字签名来创建证书的服务。 CA充当可信赖的第三方,在彼此之间没有直接了解的主体之间进行介绍。 CA证书可以由自己签名,也可以由其他CA(例如“根”CA)签名。

    更多信息,请参阅RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile

    tbsCertificate的ASN.1定义是:

      TBSCertificate  ::=  SEQUENCE  {
         version         [0]  EXPLICIT Version DEFAULT v1,
         serialNumber         CertificateSerialNumber,
         signature            AlgorithmIdentifier,
         issuer               Name,
         validity             Validity,
         subject              Name,
         subjectPublicKeyInfo SubjectPublicKeyInfo,
         issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                              -- If present, version must be v2 or v3
         subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                              -- If present, version must be v2 or v3
         extensions      [3]  EXPLICIT Extensions OPTIONAL
                              -- If present, version must be v3
         } 

    证书使用证书工厂进行实例化。 以下是如何实例化X.509证书的示例:

      try (InputStream inStream = new FileInputStream("fileName-of-cert")) {
         CertificateFactory cf = CertificateFactory.getInstance("X.509");
         X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
     } 
    从以下版本开始:
    1.2
    另请参见:
    CertificateCertificateFactoryX509ExtensionSerialized Form
    • 构造方法详细信息

      • X509Certificate

        protected X509Certificate()
        X.509证书的构造函数。
    • 方法详细信息

      • checkValidity

        public abstract void checkValidity()
                                    throws CertificateExpiredException,
                                           CertificateNotYetValidException
        检查证书当前是否有效。 如果当前日期和时间在证书中给出的有效期内。

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

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

        public abstract int getVersion()
        从证书中获取version (版本号)值。 ASN.1的定义是:
          version  [0] EXPLICIT Version DEFAULT v1
        
         Version ::=  INTEGER  {  v1(0), v2(1), v3(2)  } 
        结果
        版本号,即1,2或3。
      • getSerialNumber

        public abstract BigInteger getSerialNumber()
        从证书中获取serialNumber值。 序列号是证书颁发机构为每个证书分配的整数。 对于给定CA颁发的每个证书,它必须是唯一的(即,颁发者名称和序列号标识唯一证书)。 ASN.1的定义是:
          serialNumber     CertificateSerialNumber
        
         CertificateSerialNumber  ::=  INTEGER 
        结果
        序列号。
      • getIssuerDN

        public abstract Principal getIssuerDN()
        诋毁 ,取而代之的是getIssuerX500Principal() 此方法返回issuer作为特定于实现的Principal对象,便携式代码不应依赖该对象。

        从证书中获取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
        结果
        名称为发行人专有名称的委托人。
      • getIssuerX500Principal

        public X500Principal getIssuerX500Principal()
        从证书返回颁发者(颁发者专有名称)值X500Principal

        建议子类重写此方法。

        结果
        代表发行人专有名称的 X500Principal
        从以下版本开始:
        1.4
      • getSubjectDN

        public abstract Principal getSubjectDN()
        诋毁 ,取而代之的是getSubjectX500Principal() 此方法返回subject作为特定于实现的Principal对象,便携式代码不应依赖该对象。

        从证书中获取subject (主题可分辨名称)值。 如果subject值为空,则返回的Principal对象的getName()方法返回空字符串(“”)。

        ASN.1的定义是:

          subject    Name 

        getIssuerDNName和其他相关定义。

        结果
        名称为主题名称的委托人。
      • getSubjectX500Principal

        public X500Principal getSubjectX500Principal()
        以证书X500Principal返回证书中的主题(主题可分辨名称)值。 如果主题值为空,则返回的X500Principal对象的getName()方法返回空字符串(“”)。

        建议子类重写此方法。

        结果
        X500Principal表示主题专有名称
        从以下版本开始:
        1.4
      • getNotBefore

        public abstract Date getNotBefore()
        从证书的有效期获取notBefore日期。 相关的ASN.1定义是:
          validity             Validity
        
         Validity ::= SEQUENCE {
             notBefore      CertificateValidityDate,
             notAfter       CertificateValidityDate }
        
         CertificateValidityDate ::= CHOICE {
             utcTime        UTCTime,
             generalTime    GeneralizedTime } 
        结果
        有效期的开始日期。
        另请参见:
        checkValidity()
      • getNotAfter

        public abstract Date getNotAfter()
        从证书的有效期获取notAfter日期。 有关ASN.1定义,请参见getNotBefore
        结果
        有效期的结束日期。
        另请参见:
        checkValidity()
      • getTBSCertificate

        public abstract byte[] getTBSCertificate()
                                          throws CertificateEncodingException
        从此证书获取DER编码的证书信息tbsCertificate 这可以用于独立验证签名。
        结果
        DER编码的证书信息。
        异常
        CertificateEncodingException - 如果发生编码错误。
      • getSignature

        public abstract byte[] getSignature()
        从证书中获取signature值(原始签名位)。 ASN.1的定义是:
          signature     BIT STRING 
        结果
        签名。
      • getSigAlgName

        public abstract String getSigAlgName()
        获取证书签名算法的签名算法名称。 一个例子是字符串“SHA256withRSA”。 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 

        算法名称由algorithm OID字符串确定。

        结果
        签名算法名称。
      • getSigAlgParams

        public abstract byte[] getSigAlgParams()
        从此证书的签名算法中获取DER编码的签名算法参数。 在大多数情况下,签名算法参数为空; 参数通常随证书的公钥一起提供。 如果需要访问个别参数值,则使用AlgorithmParameters并与返回的名称进行实例化getSigAlgName

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

        结果
        DER编码的签名算法参数,如果不存在参数,则为null。
      • getIssuerUniqueID

        public abstract boolean[] getIssuerUniqueID()
        从证书中获取issuerUniqueID值。 颁发者唯一标识符存在于证书中以处理随着时间的推移重用发行者名称的可能性。 RFC 5280建议不要重用名称,并且符合证书不使用唯一标识符。 符合该配置文件的应用程序应该能够解析唯一标识符并进行比较。

        ASN.1的定义是:

          issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL
        
         UniqueIdentifier  ::=  BIT STRING 
        结果
        颁发者唯一标识符,如果证书中不存在,则为null。
      • getSubjectUniqueID

        public abstract boolean[] getSubjectUniqueID()
        从证书中获取subjectUniqueID值。

        ASN.1的定义是:

          subjectUniqueID  [2]  IMPLICIT UniqueIdentifier OPTIONAL
        
         UniqueIdentifier  ::=  BIT STRING 
        结果
        主题唯一标识符,如果证书中不存在,则为null。
      • getKeyUsage

        public abstract boolean[] getKeyUsage()
        获取一个布尔数组,表示KeyUsage扩展的位(OID = 2.5.29.15)。 密钥用法扩展定义了证书中包含的密钥的目的(例如,加密,签名,证书签名)。 ASN.1的定义是:
          KeyUsage ::= BIT STRING {
             digitalSignature        (0),
             nonRepudiation          (1),
             keyEncipherment         (2),
             dataEncipherment        (3),
             keyAgreement            (4),
             keyCertSign             (5),
             cRLSign                 (6),
             encipherOnly            (7),
             decipherOnly            (8) } 
        RFC 5280建议在使用时将其标记为关键扩展。
        结果
        此证书的KeyUsage扩展,表示为布尔数组。 数组中KeyUsage值的顺序与上述ASN.1定义中的顺序相同。 该数组将包含上面定义的每个KeyUsage的值。 如果证书中编码的KeyUsage列表长于上面的列表,则不会截断它。 如果此证书不包含KeyUsage扩展,则返回null。
      • getExtendedKeyUsage

        public List<String> getExtendedKeyUsage()
                                         throws CertificateParsingException
        获取一个不可修改的字符串列表,表示扩展密钥用法扩展的ExtKeyUsageSyntax字段的OBJECT IDENTIFIER(OID = 2.5.29.37)。 它表示可以使用经认证的公钥的一个或多个目的,除了或代替密钥用法扩展字段中指示的基本目的。 ASN.1的定义是:
          ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
        
         KeyPurposeId ::= OBJECT IDENTIFIER 
        关键目的可能由任何有需要的组织定义。 用于识别关键目的的对象标识符应根据IANA或ITU-T Rec。 X.660 | ISO / IEC / ITU 9834-1。

        此方法已添加到Java 2 Platform Standard Edition的1.4版中。 为了保持与现有服务提供者的向后兼容性,此方法不是abstract ,它提供了默认实现。 子类应该使用正确的实现覆盖此方法。

        结果
        此证书的ExtendedKeyUsage扩展,作为表示为字符串的对象标识符的不可修改列表。 如果此证书不包含ExtendedKeyUsage扩展,则返回null。
        异常
        CertificateParsingException - 如果无法解码扩展名
        从以下版本开始:
        1.4
      • getBasicConstraints

        public abstract int getBasicConstraints()
        从关键的BasicConstraints扩展(OID = 2.5.29.19)获取证书约束路径长度。

        基本约束扩展标识证书的主题是证书颁发机构(CA)以及通过该CA可能存在的证书路径有多深。 仅当cA设置为TRUE时, pathLenConstraint字段(见下文)才有意义。 在这种情况下,它提供了证书路径中可能遵循此证书的最大CA证书数。 值为零表示路径中只能跟随最终实体证书。

        ASN.1的定义是:

          BasicConstraints ::= SEQUENCE {
             cA                  BOOLEAN DEFAULT FALSE,
             pathLenConstraint   INTEGER (0..MAX) OPTIONAL } 
        结果
        如果证书中存在BasicConstraints扩展,并且证书的主题是CA,则返回值为pathLenConstraint ,否则为-1。 如果证书的主题是CA pathLenConstraint显示Integer.MAX_VALUE则返回Integer.MAX_VALUE以指示对证书路径的允许长度没有限制。
      • getSubjectAlternativeNames

        public Collection<List<?>> getSubjectAlternativeNames()
                                                       throws CertificateParsingException
        SubjectAltName扩展(OID = 2.5.29.17)获取主题备用名称的不可变集合。

        SubjectAltName扩展的ASN.1定义是:

          SubjectAltName ::= GeneralNames
        
         GeneralNames :: = SEQUENCE SIZE (1..MAX) OF GeneralName
        
         GeneralName ::= CHOICE {
              otherName                       [0]     OtherName,
              rfc822Name                      [1]     IA5String,
              dNSName                         [2]     IA5String,
              x400Address                     [3]     ORAddress,
              directoryName                   [4]     Name,
              ediPartyName                    [5]     EDIPartyName,
              uniformResourceIdentifier       [6]     IA5String,
              iPAddress                       [7]     OCTET STRING,
              registeredID                    [8]     OBJECT IDENTIFIER} 

        如果此证书不包含SubjectAltName扩展名,则返回null 否则,返回Collection ,其中的条目代表扩展中包含的每个GeneralName 每个条目是List其第一个条目是Integer (名称类型,0-8),其第二个条目是String或字节数组(名称,分别以字符串或ASN.1 DER编码形式)。

        RFC 822 ,DNS和URI名称返回为String s,使用这些类型的完善的字符串格式(受RFC 5280中包含的限制)。 使用点分四位表示法返回IPv4地址名称。 IPv6地址名称以“a1:a2:...:a8”的形式返回,其中a1-a8是十六进制值,表示地址的8个16位片段。 OID名称返回为String表示为由句点分隔的一系列非负整数。 目录名称(专有名称)以RFC 2253字符串格式返回。 没有为其他名称,X.400名称,EDI方名称或任何其他类型的名称定义标准字符串格式。 它们作为包含名称的ASN.1 DER编码形式的字节数组返回。

        请注意,返回的Collection可能包含多个相同类型的名称。 另请注意,返回的Collection是不可变的,并且克隆包含字节数组的任何条目以防止后续修改。

        此方法已添加到Java 2 Platform Standard Edition的1.4版中。 为了保持与现有服务提供商的向后兼容性,此方法不是abstract ,它提供了默认实现。 子类应该使用正确的实现覆盖此方法。

        结果
        一个不可变的 Collection主题替代名称(或 null
        异常
        CertificateParsingException - 如果无法解码扩展名
        从以下版本开始:
        1.4
      • getIssuerAlternativeNames

        public Collection<List<?>> getIssuerAlternativeNames()
                                                      throws CertificateParsingException
        IssuerAltName扩展(OID = 2.5.29.18)获取发行者替代名称的不可变集合。

        IssuerAltName扩展的ASN.1定义是:

          IssuerAltName ::= GeneralNames 
        的ASN.1定义GeneralNames中定义getSubjectAlternativeNames

        如果此证书不包含IssuerAltName扩展名,则返回null 否则,返回Collection ,其中的条目表示扩展中包含的每个GeneralName 每个条目是List其第一个条目是Integer (名称类型,0-8),其第二个条目是String或字节数组(名称,分别以字符串或ASN.1 DER编码形式)。 有关每种名称类型使用的格式的更多详细信息,请参阅getSubjectAlternativeNames方法。

        请注意,返回的Collection可能包含多个相同类型的名称。 另请注意,返回的Collection是不可变的,并且克隆包含字节数组的任何条目以防止后续修改。

        此方法已添加到Java 2 Platform Standard Edition的1.4版中。 为了保持与现有服务提供者的向后兼容性,此方法不是abstract ,它提供了默认实现。 子类应该使用正确的实现覆盖此方法。

        结果
        不可变的 Collection发行人替代名称(或 null
        异常
        CertificateParsingException - 如果无法解码扩展名
        从以下版本开始:
        1.4