java.lang.Object javax.security.cert.Certificate javax.security.cert.X509Certificate
public abstract class X509Certificate
X.509 v1 证书的抽象类。此类提供了一种访问 X.509 v1 证书所有属性的标准方式。无法通过此接口提供专用于 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)。
由证书颁发机构 (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 证书的代码都要查找 Java 安全属性文件来找到实际的实现,或者实例化一个默认的实现。
Java 安全属性文件位于指定的 <JAVA_HOME>/lib/security/java.security 文件中。<JAVA_HOME> 是指 java.home 系统属性的值并且指定安装 JRE 的目录。在安全属性文件中,X.509 v1 的默认实现可能如下:
cert.provider.x509v1=com.sun.security.cert.internal.x509.X509V1CertImpl
要想实例化另一个实现,必须更改此 cert.provider.x509v1
属性的值。如果未设置此安全属性,则使用默认实现。目前,由于对安全属性的访问可能有安全限制,所以在类初始化时查找并缓存此值,如果无法访问安全属性,则退而使用默认实现。
注:包 javax.security.cert
中的类用于与早期版本的 Java 安全套接字扩展(Java Secure Socket Extension,JSSE)保持兼容。新的应用程序应该使用 java.security.cert
中的标准 Java SE 证书类。
Certificate
,
X509Extension
构造方法摘要 | |
---|---|
X509Certificate() |
方法摘要 | |
---|---|
abstract void |
checkValidity() 检查证书目前是否有效。 |
abstract void |
checkValidity(Date date) 检查指定的日期是否处于证书的有效期内。 |
static X509Certificate |
getInstance(byte[] certData) 实例化一个 X509Certificate 对象,并使用指定的 byte 数组初始化它。 |
static X509Certificate |
getInstance(InputStream inStream) 实例化一个 X509Certificate 对象,并使用从输入流 inStream 读取的数据初始化它。 |
abstract Principal |
getIssuerDN() 获取证书的 issuer (发布方的标识名)值。 |
abstract Date |
getNotAfter() 获取证书有效期的 notAfter 日期。 |
abstract Date |
getNotBefore() 获取证书有效期的 notBefore 日期。 |
abstract BigInteger |
getSerialNumber() 获取证书的 serialNumber 值。 |
abstract String |
getSigAlgName() 获取用于该证书签名算法的名称。 |
abstract String |
getSigAlgOID() 获取证书的签名算法 OID 字符串。 |
abstract byte[] |
getSigAlgParams() 从此证书的签名算法中获取 DER 编码形式的签名算法参数。 |
abstract Principal |
getSubjectDN() 获取证书的 subject (主体的标识名)值。 |
abstract int |
getVersion() 获取证书的 version (版本号)值。 |
从类 javax.security.cert.Certificate 继承的方法 |
---|
equals, getEncoded, getPublicKey, hashCode, toString, verify, verify |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public X509Certificate()
方法详细信息 |
---|
public static final X509Certificate getInstance(InputStream inStream) throws CertificateException
inStream
读取的数据初始化它。在安全属性文件中,属性
cert.provider.x509v1
的值指定了一个类,而这个类提供了该实现(X509Certificate 是一个抽象类)。
注:期望输入流中只有一个 DER 编码的证书。另外,所有 X509Certificate 子类必须提供以下形式的构造方法:
public <subClass>(InputStream inStream) ...
inStream
- 输入流,为了初始化该证书而要从中读取数据。
CertificateException
- 如果发生类初始化或证书解析错误。
public static final X509Certificate getInstance(byte[] certData) throws CertificateException
cert.provider.x509v1
属性值的类来提供该实现(X509Certificate 是一个抽象类)。
注:所有 X509Certificate 子类必须提供以下形式的构造方法:
public <subClass>(InputStream inStream) ...
certData
- 包含 DER 编码证书的 byte 数组。
certData
中的数据初始化该对象。
CertificateException
- 如果发生类初始化或证书解析错误。
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
有效期由两个日期/时间值组成:证书有效的起始日期(和时间)和终止日期(和时间)。用 ASN.1 中定义如下:
validity ValidityValidity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
CertificateExpiredException
- 如果证书已过期。
CertificateNotYetValidException
- 如果证书不再有效。
public abstract void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException
date
- 要检查的 Date,以确定此证书在该日期/时间是否有效。
CertificateExpiredException
- 如果对于所提供的
date
而言该证书已过期。
CertificateNotYetValidException
- 如果对于所提供的
date
而言该证书不再有效。
checkValidity()
public abstract int getVersion()
version
(版本号)值。此内容的 ASN.1 定义如下:
version [0] EXPLICIT Version DEFAULT v1Version ::= INTEGER { v1(0), v2(1), v3(2) }
public abstract BigInteger getSerialNumber()
serialNumber
值。序列号是证书颁发机构为每个证书所分配的一个整数。给定的 CA 所发布的每个证书的序列号必须是唯一的(即发布方名称和序列号标识一个唯一的证书)。此内容的 ASN.1 定义如下:
serialNumber CertificateSerialNumberCertificateSerialNumber ::= INTEGER
public abstract Principal getIssuerDN()
issuer
(发布方的标识名)值。发布方名称标识了签署(并发布)该证书的实体。
发布方名称字段包含一个 X.500 标识名 (DN)。此内容的 ASN.1 定义如下:
issuer NameName ::= 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
通常是
PrintableString
、
TeletexString
或
UniversalString
之一。
public abstract Principal getSubjectDN()
subject
(主体的标识名)值。此内容的 ASN.1 定义如下:
subject Name
有关 Name
和其他相关定义,请参阅 getIssuerDN。
getIssuerDN()
public abstract Date getNotBefore()
notBefore
日期。相关的 ASN.1 定义如下:
validity ValidityValidity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
checkValidity()
public abstract Date getNotAfter()
notAfter
日期。相关的 ASN.1 定义,请参阅
getNotBefore。
checkValidity()
public abstract String getSigAlgName()
signatureAlgorithm AlgorithmIdentifierAlgorithmIdentifier ::= 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 字符串确定该算法名。
public abstract String getSigAlgOID()
相关的 ASN.1 定义,请参阅 getSigAlgName。
public abstract byte[] getSigAlgParams()
相关的 ASN.1 定义,请参阅 getSigAlgName。