基本 X.509 格式由 ISO/IEC 和 ANSI X9 定义,并在 ASN.1 中描述如下:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }
这些证书广泛用于支持 Internet 安全系统中的身份验证和其他功能。常见应用程序包括隐私增强邮件 (PEM)、传输层安全 (SSL)、可信软件分发的代码签名和安全电子交易 (SET)。
这些证书由 Certificate Authorities (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 证书的代码都会参考 cert.provider.x509v1 安全属性的值来定位实际实现或实例化默认实现。
cert.provider.x509v1 属性设置为 X.509 的默认实现,例如:
cert.provider.x509v1=com.sun.security.cert.internal.x509.X509V1CertImpl
必须更改此 cert.provider.x509v1 属性的值以实例化另一个实现。如果未设置此安全属性,将使用默认实现。目前,由于对 Security 属性的访问可能存在安全限制,因此在类初始化时查找并缓存此值,如果无法访问 Security 属性,将回退到默认实现。
Note: The classes in the package javax.security.cert exist for compatibility with earlier versions of the Java Secure Sockets Extension (JSSE). New applications should instead use the standard Java SE certificate classes located in java.security.cert .
- 自从:
- 1.4
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract void已弃用,将被删除:此 API 元素可能会在未来版本中删除。检查证书当前是否有效。abstract voidcheckValidity(Date date) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。检查指定的日期是否在证书的有效期内。static final X509CertificategetInstance(byte[] certData) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。实例化 X509Certificate 对象,并使用指定的字节数组对其进行初始化。static final X509CertificategetInstance(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(版本号)值。在类 javax.security.cert.Certificate 中声明的方法
equals, getEncoded, getPublicKey, hashCode, toString, verify, verify
-
构造方法详细信息
-
X509Certificate
public X509Certificate()已弃用,将被删除:此 API 元素可能会在未来版本中删除。子类调用的构造方法。
-
-
方法详情
-
getInstance
已弃用,将被删除:此 API 元素可能会在未来版本中删除。实例化 X509Certificate 对象,并使用从输入流inStream读取的数据对其进行初始化。实现(X509Certificate 是一个抽象类)由指定为cert.provider.x509v1安全属性值的类提供。注意:输入流中预计只有一个 DER 编码证书。此外,所有 X509Certificate 子类都必须提供以下形式的构造方法:
public <subClass>(InputStream inStream) ...- 参数:
inStream- 一个输入流,其中包含要读取的数据以初始化证书。- 返回:
- 使用输入流中的数据初始化的 X509Certificate 对象。
- 抛出:
CertificateException- 如果发生类初始化或证书解析错误。
-
getInstance
已弃用,将被删除:此 API 元素可能会在未来版本中删除。实例化 X509Certificate 对象,并使用指定的字节数组对其进行初始化。实现(X509Certificate 是一个抽象类)由指定为cert.provider.x509v1安全属性值的类提供。注意:所有 X509Certificate 子类都必须提供以下形式的构造方法:
public <subClass>(InputStream inStream) ...- 参数:
certData- 包含 DER 编码证书的字节数组。- 返回:
-
使用来自
certData的数据初始化的 X509Certificate 对象。 - 抛出:
CertificateException- 如果发生类初始化或证书解析错误。
-
checkValidity
public abstract void checkValidity() throws CertificateExpiredException , CertificateNotYetValidException已弃用,将被删除:此 API 元素可能会在未来版本中删除。检查证书当前是否有效。如果当前日期和时间在证书中给出的有效期内。有效期由两个日期/时间值组成:证书有效的第一个和最后一个日期(和时间)。它在 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 已弃用,将被删除:此 API 元素可能会在未来版本中删除。检查指定的日期是否在证书的有效期内。换句话说,这决定了证书在指定的日期/时间是否有效。- 参数:
date- 检查该证书在该日期/时间是否有效的日期。- 抛出:
CertificateExpiredException- 如果证书相对于提供的date已过期。CertificateNotYetValidException- 如果证书相对于提供的date尚未生效。- 参见:
-
getVersion
public abstract int getVersion()已弃用,将被删除:此 API 元素可能会在未来版本中删除。从证书中获取version(版本号)值。 ASN.1 对此的定义是:version [0] EXPLICIT Version DEFAULT v1 Version ::= INTEGER { v1(0), v2(1), v3(2) }- 返回:
- 来自 ASN.1 编码的版本号,即 0、1 或 2。
-
getSerialNumber
已弃用,将被删除:此 API 元素可能会在未来版本中删除。从证书中获取serialNumber值。序列号是证书颁发机构分配给每个证书的整数。对于给定 CA 颁发的每个证书,它必须是唯一的(即,颁发者名称和序列号标识一个唯一的证书)。 ASN.1 对此的定义是:serialNumber CertificateSerialNumber CertificateSerialNumber ::= INTEGER
- 返回:
- 序列号。
-
getIssuerDN
已弃用,将被删除:此 API 元素可能会在未来版本中删除。从证书中获取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 ::= ANYName描述了一个由属性组成的分层名称,例如国家名称和相应的值,例如美国。AttributeValue组件的类型由AttributeType确定;一般来说,它将是一个directoryString。directoryString通常是PrintableString、TeletexString或UniversalString之一。- 返回:
- 一个 Principal,其名称是发行者的专有名称。
-
getSubjectDN
已弃用,将被删除:此 API 元素可能会在未来版本中删除。- 返回:
- 名称为主题名称的 Principal。
- 参见:
-
getNotBefore
已弃用,将被删除:此 API 元素可能会在未来版本中删除。从证书的有效期中获取notBefore日期。相关的 ASN.1 定义是:validity Validity Validity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate } CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }- 返回:
- 有效期的开始日期。
- 参见:
-
getNotAfter
已弃用,将被删除:此 API 元素可能会在未来版本中删除。从证书的有效期中获取notAfter日期。有关 ASN.1 的相关定义,请参阅getNotBefore。- 返回:
- 有效期的结束日期。
- 参见:
-
getSigAlgName
已弃用,将被删除:此 API 元素可能会在未来版本中删除。获取证书签名算法的签名算法名称。一个例子是字符串“SHA-1/DSA”。 ASN.1 对此的定义是: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算法名称由
algorithmOID 字符串确定。- 返回:
- 签名算法名称。
-
getSigAlgOID
已弃用,将被删除:此 API 元素可能会在未来版本中删除。从证书中获取签名算法 OID 字符串。 OID 由一组由句点分隔的正整数表示。例如,根据 PKIX 第 I 部分,字符串“1.2.840.10040.4.3”使用 DSA 签名算法标识 SHA-1。有关 ASN.1 的相关定义,请参阅
getSigAlgName。- 返回:
- 签名算法OID字符串。
-
getSigAlgParams
public abstract byte[] getSigAlgParams()已弃用,将被删除:此 API 元素可能会在未来版本中删除。从此证书的签名算法中获取 DER 编码的签名算法参数。大多数情况下,签名算法参数为空;这些参数通常与证书的公钥一起提供。有关 ASN.1 的相关定义,请参阅
getSigAlgName。- 返回:
- DER 编码的签名算法参数,如果没有参数则为 null。
-
java.security.cert中的类。