public abstract class X509Certificate extends Certificate
基本的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(如“root”)CA签名的。
tbsCertificate的ASN.1 tbsCertificate
是:
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证书的代码都会参考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证书类。
Certificate
, X509Extension
, security properties
Constructor and Description |
---|
X509Certificate() |
Modifier and Type | Method and Description |
---|---|
abstract void |
checkValidity()
检查证书当前是否有效。
|
abstract void |
checkValidity(Date date)
检查指定的日期是否在证书的有效期内。
|
static X509Certificate |
getInstance(byte[] certData)
实例化一个X509Certificate对象,并用指定的字节数组初始化它。
|
static X509Certificate |
getInstance(InputStream inStream)
实例化一个X509Certificate对象,并使用从输入流
inStream 读取的数据进行
inStream 。
|
abstract Principal |
getIssuerDN()
从
issuer 获取
issuer (发行人可分辨名称)值。
|
abstract Date |
getNotAfter()
从
notAfter 的有效期获取
notAfter 日期。
|
abstract Date |
getNotBefore()
从
notBefore 的有效期获取
notBefore 日期。
|
abstract BigInteger |
getSerialNumber()
从证书获取
serialNumber 值。
|
abstract String |
getSigAlgName()
获取证书签名算法的签名算法名称。
|
abstract String |
getSigAlgOID()
从证书获取签名算法OID字符串。
|
abstract byte[] |
getSigAlgParams()
从该证书的签名算法获取DER编码的签名算法参数。
|
abstract Principal |
getSubjectDN()
从
subject 获取
subject (主题可分辨名称)值。
|
abstract int |
getVersion()
从
version 获取
version (版本号)值。
|
equals, getEncoded, getPublicKey, hashCode, toString, verify, verify
public static final X509Certificate getInstance(InputStream inStream) throws CertificateException
inStream
读取的数据进行inStream
。
实现(X509Certificate是抽象类)由指定为cert.provider.x509v1
security属性值的类提供。
注意:预计只有一个DER编码证书在输入流中。 此外,所有X509Certificate子类都必须提供以下形式的构造函数:
public <subClass>(InputStream inStream) ...
inStream
- 要读取的数据的
inStream
的输入流。
CertificateException
- 如果发生类初始化或证书解析错误。
public static final X509Certificate getInstance(byte[] certData) throws CertificateException
cert.provider.x509v1
安全属性值的类提供。
注意:所有X509Certificate子类必须提供以下形式的构造函数:
public <subClass>(InputStream inStream) ...
certData
- 包含DER编码证书的字节数组。
certData
。
CertificateException
- 如果发生类初始化或证书解析错误。
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
- 如果证书尚未生效。
public abstract void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException
date
- 在该日期/时间检查此证书是否有效的日期。
CertificateExpiredException
- 如果证书已经到期提供的
date
。
CertificateNotYetValidException
- 如果证书不符合提供的
date
有效。
checkValidity()
public abstract int getVersion()
version
获取version
(版本号)值。
ASN.1的定义是:
version [0] EXPLICIT Version DEFAULT v1
Version ::= INTEGER { v1(0), v2(1), v3(2) }
public abstract BigInteger getSerialNumber()
serialNumber
值。
序列号是由证书颁发机构分配给每个证书的整数。
对于由给定CA颁发的每个证书(即,发行者名称和序列号标识唯一证书),它必须是唯一的。
ASN.1的定义是:
serialNumber CertificateSerialNumber
CertificateSerialNumber ::= INTEGER
public abstract Principal getIssuerDN()
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
;
一般会是directoryString
。
甲directoryString
通常之一PrintableString
, TeletexString
或UniversalString
。
public abstract Principal getSubjectDN()
getIssuerDN()
public abstract Date getNotBefore()
notBefore
的有效期获取notBefore
日期。
相关的ASN.1定义是:
validity Validity
Validity ::= SEQUENCE {
notBefore CertificateValidityDate,
notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
checkValidity()
public abstract Date getNotAfter()
notAfter
的有效期获取notAfter
日期。
见getNotBefore
对相关的ASN.1定义。
checkValidity()
public abstract String getSigAlgName()
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字符串确定。
public abstract String getSigAlgOID()
见getSigAlgName
对相关的ASN.1定义。
public abstract byte[] getSigAlgParams()