X.509的基本格式由ISO/IEC和ANSI X9定义,并在ASN.1中描述如下:
证书 ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING }
这些证书被广泛用于支持互联网安全系统中的身份验证和其他功能。常见应用包括隐私增强邮件(PEM)、传输层安全性(SSL)、用于受信任软件分发的代码签名以及安全电子交易(SET)。
这些证书由证书颁发机构(CAs)管理和担保。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 = <从文件中读取的证书> 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证书类。
- 自版本:
- 1.4
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
已弃用,将被移除:此API元素可能在将来的版本中被移除。检查证书当前是否有效。abstract void
checkValidity
(Date date) 已弃用,将被移除:此API元素可能在将来的版本中被移除。检查指定日期是否在证书的有效期内。static final X509Certificate
getInstance
(byte[] certData) 已弃用,将被移除:此API元素可能在将来的版本中被移除。实例化X509Certificate对象,并使用指定的字节数组进行初始化。static final X509Certificate
getInstance
(InputStream inStream) 已弃用,将被移除:此API元素可能在将来的版本中被移除。实例化X509Certificate对象,并使用从输入流inStream
读取的数据进行初始化。abstract Principal
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书中获取issuer
(颁发者可分辨名称)值。abstract Date
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书的有效期中获取notAfter
日期。abstract Date
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书的有效期中获取notBefore
日期。abstract BigInteger
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书中获取serialNumber
值。abstract String
已弃用,将被移除:此API元素可能在将来的版本中被移除。获取证书签名算法名称。abstract String
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书中获取签名算法OID字符串。abstract byte[]
已弃用,将被移除:此API元素可能在将来的版本中被移除。从此证书的签名算法获取DER编码的签名算法参数。abstract Principal
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书中获取subject
(主体可分辨名称)值。abstract int
已弃用,将被移除:此API元素可能在将来的版本中被移除。从证书中获取version
(版本号)值。Methods declared in class javax.security.cert.Certificate
equals, getEncoded, getPublicKey, hashCode, toString, verify, verify
-
Constructor Details
-
X509Certificate
public X509Certificate()Deprecated, for removal: This API element is subject to removal in a future version.子类调用的构造函数。
-
-
Method Details
-
getInstance
Deprecated, for removal: This API element is subject to removal in a future version.实例化X509Certificate对象,并使用从输入流inStream
读取的数据进行初始化。实现(X509Certificate是一个抽象类)由指定为cert.provider.x509v1
安全属性值的类提供。注意:预期输入流中只有一个DER编码的证书。此外,所有X509Certificate子类必须提供以下形式的构造函数:
public <subClass>(InputStream inStream) ...
- 参数:
-
inStream
- 包含要读取以初始化证书的数据的输入流。 - 返回:
- 使用来自输入流的数据初始化的X509Certificate对象。
- 抛出:
-
CertificateException
- 如果发生类初始化或证书解析错误。
-
getInstance
Deprecated, for removal: This API element is subject to removal in a future version.实例化X509Certificate对象,并使用指定的字节数组进行初始化。实现(X509Certificate是一个抽象类)由指定为cert.provider.x509v1
安全属性值的类提供。注意:所有X509Certificate子类必须提供以下形式的构造函数:
public <subClass>(InputStream inStream) ...
- 参数:
-
certData
- 包含DER编码证书的字节数组。 - 返回:
-
使用
certData
中的数据初始化的X509Certificate对象。 - 抛出:
-
CertificateException
- 如果发生类初始化或证书解析错误。
-
checkValidity
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidExceptionDeprecated, for removal: This API element is subject to removal in a future version.检查证书当前是否有效。如果当前日期和时间在证书中给定的有效期内,则证书有效。有效期由两个日期/时间值组成:证书有效的第一个和最后一个日期(和时间)。在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 Deprecated, for removal: This API element is subject to removal in a future version.检查指定日期是否在证书的有效期内。换句话说,这确定证书在指定日期/时间是否有效。- 参数:
-
date
- 要检查的日期,以查看证书在该日期/时间是否有效。 - 抛出:
-
CertificateExpiredException
- 如果证书相对于提供的date
已过期。 -
CertificateNotYetValidException
- 如果证书相对于提供的date
尚未生效。 - 参见:
-
getVersion
public abstract int getVersion()Deprecated, for removal: This API element is subject to removal in a future version.从证书中获取version
(版本号)值。ASN.1定义如下:version [0] EXPLICIT Version DEFAULT v1 Version ::= INTEGER { v1(0), v2(1), v3(2) }
- 返回:
- 来自ASN.1编码的版本号,即0、1或2。
-
getSerialNumber
Deprecated, for removal: This API element is subject to removal in a future version.从证书中获取serialNumber
值。序列号是由认证机构分配给每个证书的整数。对于由特定CA签发的每个证书,它必须是唯一的(即,发行者名称和序列号标识唯一证书)。ASN.1对此的定义为:serialNumber CertificateSerialNumber CertificateSerialNumber ::= INTEGER
- 返回:
- 序列号。
-
getIssuerDN
Deprecated, for removal: This API element is subject to removal in a future version.从证书中获取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
之一。- 返回:
- 名称为发行者可分辨名称的主体。
-
getSubjectDN
Deprecated, for removal: This API element is subject to removal in a future version.- 返回:
- 名称为主体名称的主体。
- 另请参见:
-
getNotBefore
Deprecated, for removal: This API element is subject to removal in a future version.从证书的有效期中获取notBefore
日期。相关的ASN.1定义为:validity Validity Validity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate } CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
- 返回:
- 有效期的开始日期。
- 另请参见:
-
getNotAfter
Deprecated, for removal: This API element is subject to removal in a future version.从证书的有效期中获取notAfter
日期。有关相关ASN.1定义,请参见getNotBefore
。- 返回:
- 有效期的结束日期。
- 另请参见:
-
getSigAlgName
Deprecated, for removal: This API element is subject to removal in a future version.获取证书签名算法的签名算法名称。例如,字符串为"SHA-1/DSA"。ASN.1对此的定义为:signatureAlgorithm AlgorithmIdentifier AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- 包含用于算法对象标识符值的类型注册使用的值
算法名称是从
algorithm
OID字符串确定的。- 返回:
- 签名算法名称。
-
getSigAlgOID
Deprecated, for removal: This API element is subject to removal in a future version.从证书中获取签名算法OID字符串。OID由一组用句点分隔的正整数表示。例如,字符串"1.2.840.10040.4.3"标识PKIX第I部分中的SHA-1与DSA签名算法。有关相关ASN.1定义,请参见
getSigAlgName
。- 返回:
- 签名算法OID字符串。
-
getSigAlgParams
public abstract byte[] getSigAlgParams()Deprecated, for removal: This API element is subject to removal in a future version.从此证书的签名算法中获取DER编码的签名算法参数。在大多数情况下,签名算法参数为null;参数通常与证书的公钥一起提供。有关相关ASN.1定义,请参见
getSigAlgName
。- 返回:
- DER编码的签名算法参数,如果没有参数则为null。
-
java.security.cert
instead.