所有类


java.security.cert
类 X509Certificate

java.lang.Object
  继承者 java.security.cert.Certificate
      继承者 java.security.cert.X509Certificate
所有已实现的接口:
Serializable, X509Extension

public abstract class X509Certificate
   
   
   
   
   
extends Certificate
implements X509Extension

X.509 证书的抽象类。此类提供了一种访问 X.509 证书所有属性的标准方式。

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

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

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

证书颁发机构 (CA) 来管理和担保这些证书。CA 的工作是创建证书,方法是将数据置于 X.509 标准格式,然后以数字方式签署该数据。CA 充当受信任的第三方,在不能直接通信的主体之间传递信息。CA 证书可由其自身签名,也可由其他 CA 签名,如“根”CA。

在 RFC 2459,即 "Internet X.509 Public Key Infrastructure Certificate and CRL Profile"(位于 http://www.ietf.org/rfc/rfc2459.txt )中可找到更多信息。

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 证书。

 
 InputStream inStream = new FileInputStream("fileName-of-cert");
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
 inStream.close();
 

另请参见:
Certificate, CertificateFactory, X509Extension, 序列化表格

嵌套类摘要
 
从类 java.security.cert.Certificate 继承的嵌套类/接口
Certificate.CertificateRep
 
构造方法摘要
protected X509Certificate()
          X.509 证书的构造方法。
 
方法摘要
abstract  voidcheckValidity()
          检查证书目前是否有效。
abstract  voidcheckValidity(Date date)
          检查给定的日期是否处于证书的有效期内。
abstract  intgetBasicConstraints()
          从关键 BasicConstraints 扩展 (OID = 2.5.29.19) 中获得证书的限制路径长度。
 List<String>getExtendedKeyUsage()
          获得一个不可修改的 String 列表,表示已扩展的密钥使用扩展 (OID = 2.5.29.37) 中 ExtKeyUsageSyntax 字段的对象标识符(OBJECT IDENTIFIER)。
 Collection<List<?>>getIssuerAlternativeNames()
          从 IssuerAltName 扩展 (OID = 2.5.29.18) 中获得一个发布方替换名称的不可变集合。
abstract  PrincipalgetIssuerDN()
          已过时,由 getIssuerX500Principal() 替代。
abstract  boolean[]getIssuerUniqueID()
          获得证书的 issuerUniqueID 值。
 X500PrincipalgetIssuerX500Principal()
          以 X500Principal 的形式返回证书的发布方(发布方标识名)值。
abstract  boolean[]getKeyUsage()
          获得一个表示 KeyUsage 扩展 (OID = 2.5.29.15) 的各个位的 boolean 数组。
abstract  DategetNotAfter()
          获得证书有效期的 notAfter 日期。
abstract  DategetNotBefore()
          获得证书有效期的 notBefore 日期。
abstract  BigIntegergetSerialNumber()
          获得证书的 serialNumber 值。
abstract  StringgetSigAlgName()
          获得证书签名算法的签名算法名。
abstract  StringgetSigAlgOID()
          获得证书的签名算法 OID 字符串。
abstract  byte[]getSigAlgParams()
          从此证书的签名算法中获得 DER 编码形式的签名算法参数。
abstract  byte[]getSignature()
          获得证书的 signature 值(原始签名位)。
 Collection<List<?>>getSubjectAlternativeNames()
          从 SubjectAltName 扩展 (OID = 2.5.29.17) 中获得一个主体替换名称的不可变集合。
abstract  PrincipalgetSubjectDN()
          已过时,由 getSubjectX500Principal() 替代。
abstract  boolean[]getSubjectUniqueID()
          获得证书的 subjectUniqueID 值。
 X500PrincipalgetSubjectX500Principal()
          以 X500Principal 的形式返回证书的主体(主体标识名)值。
abstract  byte[]getTBSCertificate()
          从此证书中获得以 DER 编码的证书信息,即 tbsCertificate
abstract  intgetVersion()
          获得证书的 version(版本号)值。
 
从类 java.security.cert.Certificate 继承的方法
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
从接口 java.security.cert.X509Extension 继承的方法
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
 

构造方法详细信息

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 - 如果证书不再有效。

checkValidity

public abstract void checkValidity(Date date)
                            throws CertificateExpiredException,
                                   CertificateNotYetValidException
检查给定的日期是否处于证书的有效期内。换句话说,这确定该证书在给定的日期/时间是否有效。

参数:
date - 要检查的 Date,以确定此证书在该日期/时间是否有效。
抛出:
CertificateExpiredException - 如果对于所提供的 date 而言该证书已过期。
CertificateNotYetValidException - 如果对于所提供的 date 而言该证书不再有效。
另请参见:
checkValidity()

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() 替代。此方法返回作为特定 Principal 对象实现的 issuer,可移植的代码不应依靠该对象。

获得证书的 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 来确定;一般是 directoryStringdirectoryString 通常是 PrintableStringTeletexStringUniversalString 之一。

返回:
一个 Principal,其名称是发布方的标识名。

getIssuerX500Principal

public X500Principal getIssuerX500Principal()
X500Principal 的形式返回证书的发布方(发布方标识名)值。

建议子类重写此方法。

返回:
一个表示发布方标识名的 X500Principal
从以下版本开始:
1.4

getSubjectDN

public abstract Principal getSubjectDN()
已过时,由 getSubjectX500Principal() 替代。此方法返回作为特定 Principal 对象实现的 subject,可移植的代码不应依靠该对象。

获得证书的 subject(主体的标识名)值。如果 subject 值为空,则返回的 Principal 对象的 getName() 方法将返回一个空字符串 ("")。

此内容的 ASN.1 定义如下:

 subject    Name
 

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

返回:
一个 Principal,其名称是主体名。