|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.security.cert
类 X509Certificate
java.lang.Object javax.security.cert.Certificate javax.security.cert.X509Certificate
-
public abstract class X509Certificate
- extends Certificate
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> 是指安装 JDK 的目录。在安全属性文件中,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
中的标准 J2SE 证书类。
- 从以下版本开始:
- 1.4
- 另请参见:
-
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 |
构造方法详细信息 |
---|
X509Certificate
public X509Certificate()
方法详细信息 |
---|
getInstance
public static final X509Certificate getInstance(InputStream inStream) throws CertificateException
-
实例化一个 X509Certificate 对象,并使用从输入流
inStream
读取的数据初始化它。在安全属性文件中,属性cert.provider.x509v1
的值指定了一个类,而这个类提供了该实现(X509Certificate 是一个抽象类)。注:期望输入流中只有一个 DER 编码的证书。另外,所有 X509Certificate 子类必须提供以下形式的构造方法:
public <subClass>(InputStream inStream) ...
-
- 参数:
-
inStream
- 输入流,为了初始化该证书而要从中读取数据。 - 返回:
- 使用从输入流中读取的数据初始化了的X509Certificate 对象。
- 抛出:
-
CertificateException
- 如果发生类初始化或证书解析错误。
getInstance
public static final X509Certificate getInstance(byte[] certData) throws CertificateException
-
实例化一个 X509Certificate 对象,并使用指定的 byte 数组初始化它。由指定为安全属性文件中
cert.provider.x509v1
属性值的类来提供该实现(X509Certificate 是一个抽象类)。注:所有 X509Certificate 子类必须提供以下形式的构造方法:
public <subClass>(InputStream inStream) ...
-
- 参数:
-
certData
- 包含 DER 编码证书的 byte 数组。 - 返回:
-
X509Certificate 对象,已使用
certData
中的数据初始化该对象。 - 抛出:
-
CertificateException
- 如果发生类初始化或证书解析错误。
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) }
-
- 返回:
- ASN.1 编码形式的版本号,即 0、1 或 2。
getSerialNumber
public abstract BigInteger getSerialNumber()
-
获得证书的
serialNumber
值。序列号是证书颁发机构为每个证书所分配的一个整数。给定的 CA 所发布的每个证书的序列号必须是惟一的(即发布方名称和序列号标识一个惟一的证书)。此内容的 ASN.1 定义如下:serialNumber CertificateSerialNumber
CertificateSerialNumber ::= INTEGER
-
- 返回:
- 序列号。
getIssuerDN
public abstract Principal getIssuerDN()
-
获得证书的
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
通常是PrintableString
、TeletexString
或UniversalString
之一。 -
- 返回:
- 一个 Principal,其名称是发布方的标识名。