public abstract class X509Certificate
extends Certificate
java.lang.Object | ||
↳ | javax.security.cert.Certificate | |
↳ | javax.security.cert.X509Certificate |
X.509 v1证书的抽象类。 这提供了访问X.509证书的所有版本1属性的标准方法。 通过此界面无法使用特定于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)签名。
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();OR
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
属性的值必须更改为安装另一个实现。 如果未设置此安全性属性,则将使用默认实现。 目前,由于可能存在对安全属性访问的安全限制,因此如果Security属性不可访问,则会在类初始化时查找并缓存此值,并在默认实现中回退。
注意:包javax.security.cert
的类存在与先前版本的Java安全套接字扩展(JSSE)兼容。 新应用程序应该使用位于java.security.cert
的标准Java SE证书类。
也可以看看:
Public constructors |
|
---|---|
X509Certificate() |
Public methods |
|
---|---|
abstract void |
checkValidity() 检查证书当前是否有效。 |
abstract void |
checkValidity(Date date) 检查指定日期是否在证书有效期内。 |
static final X509Certificate |
getInstance(byte[] certData) 实例化一个X509Certificate对象,并使用指定的字节数组对其进行初始化。 |
static final X509Certificate |
getInstance(InputStream inStream) 实例化一个X509Certificate对象,并使用从输入流 |
abstract Principal |
getIssuerDN() 从证书获取 |
abstract Date |
getNotAfter() 从证书的有效期获取 |
abstract Date |
getNotBefore() 从证书的有效期获取 |
abstract BigInteger |
getSerialNumber() 从证书获取 |
abstract String |
getSigAlgName() 获取证书签名算法的签名算法名称。 |
abstract String |
getSigAlgOID() 从证书获取签名算法OID字符串。 |
abstract byte[] |
getSigAlgParams() 从此证书的签名算法中获取DER编码的签名算法参数。 |
abstract Principal |
getSubjectDN() 从证书获取 |
abstract int |
getVersion() 获取证书中的 |
Inherited methods |
|
---|---|
From class javax.security.cert.Certificate
|
|
From class java.lang.Object
|
void checkValidity ()
检查证书当前是否有效。 如果当前日期和时间在证书中给出的有效期内。
有效期由两个日期/时间值组成:证书有效的第一个和最后一个日期(和时间)。 它在ASN.1中被定义为:
validity ValidityValidity :: = SEQUENCE {notBefore CertificateValidityDate,notAfter CertificateValidityDate}
CertificateValidityDate :: = CHOICE {utcTime UTCTime,generalTime GeneralizedTime}
Throws | |
---|---|
CertificateExpiredException |
if the certificate has expired. |
CertificateNotYetValidException |
if the certificate is not yet valid. |
void checkValidity (Date date)
检查指定日期是否在证书有效期内。 换句话说,这决定了证书是否在指定的日期/时间有效。
Parameters | |
---|---|
date |
Date : the Date to check against to see if this certificate is valid at that date/time. |
Throws | |
---|---|
CertificateExpiredException |
if the certificate has expired with respect to the date supplied. |
CertificateNotYetValidException |
if the certificate is not yet valid with respect to the date supplied. |
也可以看看:
X509Certificate getInstance (byte[] certData)
实例化一个X509Certificate对象,并使用指定的字节数组对其进行初始化。 实现(X509Certificate是一个抽象类)由指定为安全属性文件中cert.provider.x509v1
属性的值的类提供。
注意:所有X509Certificate子类必须提供以下格式的构造函数:
public <subClass>(InputStream inStream) ...
Parameters | |
---|---|
certData |
byte : a byte array containing the DER-encoded certificate. |
Returns | |
---|---|
X509Certificate |
an X509Certificate object initialized with the data from certData . |
Throws | |
---|---|
CertificateException |
if a class initialization or certificate parsing error occurs. |
X509Certificate getInstance (InputStream inStream)
实例化一个X509Certificate对象,并使用从输入流inStream
读取的数据对它进行初始化。 实现(X509Certificate是一个抽象类)由指定为安全属性文件中cert.provider.x509v1
属性的值的类提供。
注意:输入流中预计只有一个DER编码证书。 此外,所有X509Certificate子类都必须提供以下格式的构造函数:
public <subClass>(InputStream inStream) ...
Parameters | |
---|---|
inStream |
InputStream : an input stream with the data to be read to initialize the certificate. |
Returns | |
---|---|
X509Certificate |
an X509Certificate object initialized with the data from the input stream. |
Throws | |
---|---|
CertificateException |
if a class initialization or certificate parsing error occurs. |
Principal getIssuerDN ()
从证书获取issuer
(发行者专有名称)值。 发行者名称标识签署(并发行)证书的实体。
颁发机构名称字段包含X.500专有名称(DN)。 ASN.1对此的定义是:
issuer NameTheName ::= CHOICE { RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET OF AttributeValueAssertion AttributeValueAssertion ::= SEQUENCE { AttributeType, AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY
Name
describes a hierarchical name composed of attributes, such as country name, and corresponding values, such as US. The type of the
AttributeValue
component is determined by the
AttributeType
; in general it will be a
directoryString
. A
directoryString
is usually one of
PrintableString
,
TeletexString
or
UniversalString
.
Returns | |
---|---|
Principal |
a Principal whose name is the issuer distinguished name. |
Date getNotAfter ()
从证书的有效期获取notAfter
日期。 有关ASN.1定义,请参阅getNotBefore
。
Returns | |
---|---|
Date |
the end date of the validity period. |
也可以看看:
Date getNotBefore ()
从证书的有效期获取notBefore
日期。 相关的ASN.1定义如下:
validity ValidityValidity :: = SEQUENCE {notBefore CertificateValidityDate,notAfter CertificateValidityDate}
CertificateValidityDate :: = CHOICE {utcTime UTCTime,generalTime GeneralizedTime}
Returns | |
---|---|
Date |
the start date of the validity period. |
也可以看看:
BigInteger getSerialNumber ()
从证书获取serialNumber
值。 序列号是证书颁发机构为每个证书分配的整数。 对于给定CA颁发的每个证书而言,它必须是唯一的(即,颁发者名称和序列号标识唯一证书)。 ASN.1对此的定义是:
serialNumber CertificateSerialNumberCertificateSerialNumber :: = INTEGER
Returns | |
---|---|
BigInteger |
the serial number. |
String getSigAlgName ()
获取证书签名算法的签名算法名称。 一个例子是字符串“SHA-1 / DSA”。 ASN.1对此的定义是:
signatureAlgorithm AlgorithmIdentifierAlgorithmIdentifier :: = SEQUENCE {algorithm OBJECT IDENTIFIER,参数ANY DEFINED BY algorithm OPTIONAL} - 包含一个类型值 - 注册用于 - 算法对象标识符值
算法名称由 algorithm
OID字符串确定。
Returns | |
---|---|
String |
the signature algorithm name. |
String getSigAlgOID ()
从证书获取签名算法OID字符串。 一个OID由一组正整数表示,用句点分隔。 例如,根据PKIX第I部分,字符串“1.2.840.10040.4.3”用DSA签名算法标识SHA-1。
有关ASN.1定义,请参见 getSigAlgName
。
Returns | |
---|---|
String |
the signature algorithm OID string. |
byte[] getSigAlgParams ()
从此证书的签名算法中获取DER编码的签名算法参数。 在大多数情况下,签名算法参数为空; 参数通常与证书的公钥一起提供。
有关ASN.1定义,请参见 getSigAlgName
。
Returns | |
---|---|
byte[] |
the DER-encoded signature algorithm parameters, or null if no parameters are present. |
Principal getSubjectDN ()
从证书获取subject
(主题专有名称)值。 ASN.1对此的定义是:
subject Name
见 getIssuerDN
为 Name
和其他相关定义。
Returns | |
---|---|
Principal |
a Principal whose name is the subject name. |
也可以看看:
int getVersion ()
从证书获取version
(版本号)值。 ASN.1对此的定义是:
version [0] EXPLICIT Version DEFAULT v1Version :: = INTEGER {v1(0),v2(1),v3(2)}
Returns | |
---|---|
int |
the version number from the ASN.1 encoding, i.e. 0, 1 or 2. |