public abstract class X509Certificate
extends Certificate
implements X509Extension
java.lang.Object | ||
↳ | java.security.cert.Certificate | |
↳ | java.security.cert.X509Certificate |
X.509证书的抽象类。 这提供了访问X.509证书所有属性的标准方法。
1996年6月,基本的X.509 v3格式由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)签名。
更多信息请参见 RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile 。
ASN.1定义 tbsCertificate
是:
TBSCertificate ::= SEQUENCE { version [0] EXPLICIT Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version must be v2 or v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version must be v2 or v3 extensions [3] EXPLICIT Extensions OPTIONAL -- If present, version must be v3 }
证书使用证书工厂实例化。 以下是如何实例化X.509证书的示例:
try (InputStream inStream = new FileInputStream("fileName-of-cert")) { CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); }
Protected constructors |
|
---|---|
X509Certificate() X.509证书的构造函数。 |
Public methods |
|
---|---|
abstract void |
checkValidity() 检查证书当前是否有效。 |
abstract void |
checkValidity(Date date) 检查给定日期是否在证书的有效期内。 |
abstract int |
getBasicConstraints() 从关键 |
List<String> |
getExtendedKeyUsage() 获取表示扩展密钥使用扩展(OID = 2.5.29.37)的 |
Collection<List<?>> |
getIssuerAlternativeNames() 从 |
abstract Principal |
getIssuerDN() 贬低 ,由 getIssuerX500Principal()取代。 |
abstract boolean[] |
getIssuerUniqueID() 从证书获取 |
X500Principal |
getIssuerX500Principal() 以 |
abstract boolean[] |
getKeyUsage() 获取表示 |
abstract Date |
getNotAfter() 从证书的有效期获取 |
abstract Date |
getNotBefore() 从证书的有效期获取 |
abstract BigInteger |
getSerialNumber() 从证书获取 |
abstract String |
getSigAlgName() 获取证书签名算法的签名算法名称。 |
abstract String |
getSigAlgOID() 从证书获取签名算法OID字符串。 |
abstract byte[] |
getSigAlgParams() 从此证书的签名算法中获取DER编码的签名算法参数。 |
abstract byte[] |
getSignature() 从证书获取 |
Collection<List<?>> |
getSubjectAlternativeNames() 从 |
abstract Principal |
getSubjectDN() 诋毁 ,取而代之的是 getSubjectX500Principal() 。 |
abstract boolean[] |
getSubjectUniqueID() 获取证书的 |
X500Principal |
getSubjectX500Principal() 以 |
abstract byte[] |
getTBSCertificate() 从此证书获取DER编码的证书信息, |
abstract int |
getVersion() 从证书获取 |
void |
verify(PublicKey key, Provider sigProvider) 验证是否使用与指定的公钥对应的私钥对该证书进行了签名。 |
Inherited methods |
|
---|---|
From class java.security.cert.Certificate
|
|
From class java.lang.Object
|
|
From interface java.security.cert.X509Extension
|
void checkValidity ()
检查证书当前是否有效。 如果当前日期和时间在证书中给出的有效期内。
有效期由两个日期/时间值组成:证书有效的第一个和最后一个日期(和时间)。 它在ASN.1中被定义为:
validity Validity Validity ::= 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. |
也可以看看:
int getBasicConstraints ()
从关键 BasicConstraints
扩展中获取证书约束路径长度(OID = 2.5.29.19)。
基本约束扩展标识证书的主体是否是证书颁发机构(CA),以及通过该CA可以存在多长的证书路径。 pathLenConstraint
字段(见下文)仅在cA
设置为TRUE时才有意义。 在这种情况下,它会在证书路径中提供可能遵循此证书的最大数量的CA证书。 值为零表示只有最终实体证书可以在路径中跟随。
ASN.1对此的定义是:
BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL }
Returns | |
---|---|
int |
the value of pathLenConstraint if the BasicConstraints extension is present in the certificate and the subject of the certificate is a CA, otherwise -1. If the subject of the certificate is a CA and pathLenConstraint does not appear, Integer.MAX_VALUE is returned to indicate that there is no limit to the allowed length of the certification path. |
List<String> getExtendedKeyUsage ()
获取代表扩展密钥使用扩展(OID = 2.5.29.37)的ExtKeyUsageSyntax
字段的OBJECT IDENTIFIER的字符串的不可修改列表。 它表示可以使用经过认证的公钥的一个或多个目的,此外或代替在关键用途扩展字段中指示的基本目的。 ASN.1对此的定义是:
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIERKey purposes may be defined by any organization with a need. Object identifiers used to identify key purposes shall be assigned in accordance with IANA or ITU-T Rec. X.660 | ISO/IEC/ITU 9834-1.
此方法已添加到Java 2 Platform Standard Edition的1.4版本中。 为了保持与现有服务提供商的向后兼容性,此方法不是abstract
,它提供了默认实现。 子类应该用正确的实现覆盖这个方法。
Returns | |
---|---|
List<String> |
the ExtendedKeyUsage extension of this certificate, as an unmodifiable list of object identifiers represented as Strings. Returns null if this certificate does not contain an ExtendedKeyUsage extension. |
Throws | |
---|---|
CertificateParsingException |
if the extension cannot be decoded |
Collection<List<?>> getIssuerAlternativeNames ()
从 IssuerAltName
扩展名(OID = 2.5.29.18)获取不可变的发行者替代名称集合。
IssuerAltName
扩展的ASN.1定义是:
IssuerAltName ::= GeneralNamesThe ASN.1 definition of
GeneralNames
is defined in
getSubjectAlternativeNames
.
如果此证书不包含IssuerAltName
扩展名,则返回null
。 否则, Collection
返回一个代表扩展中包含的每个GeneralName
的条目。 每个条目是List
其第一条目是Integer
(名称类型,0-8),其第二条目是String
或字节数组(名称,分别以字符串或ASN.1 DER编码形式)。 有关每种名称类型使用的格式的更多详细信息,请参阅getSubjectAlternativeNames
方法。
请注意,返回的Collection
可能包含多个相同类型的名称。 另请注意,返回的Collection
是不可变的,并且包含字节数组的任何条目都被克隆以防止后续修改。
此方法已添加到Java 2 Platform Standard Edition的1.4版本中。 为了保持与现有服务提供商的向后兼容性,该方法不是abstract
,它提供了一个默认实现。 子类应该用正确的实现覆盖这个方法。
Returns | |
---|---|
Collection<List<?>> |
an immutable Collection of issuer alternative names (or null ) |
Throws | |
---|---|
CertificateParsingException |
if the extension cannot be decoded |
Principal getIssuerDN ()
贬低 ,由getIssuerX500Principal()取代。 此方法返回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 ::= ANYThe
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. |
boolean[] getIssuerUniqueID ()
从证书获取issuerUniqueID
值。 颁发者唯一标识符存在于证书中以处理发行者名称随着时间重用的可能性。 RFC 3280建议不要重复使用名称,并且符合证书不使用唯一标识符。 符合该配置文件的应用程序应该能够解析唯一标识符并进行比较。
ASN.1对此的定义是:
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL UniqueIdentifier ::= BIT STRING
Returns | |
---|---|
boolean[] |
the issuer unique identifier or null if it is not present in the certificate. |
X500Principal getIssuerX500Principal ()
以 X500Principal
从证书中返回颁发者(颁发机构专有名称)值。
建议子类重写此方法。
Returns | |
---|---|
X500Principal |
an X500Principal representing the issuer distinguished name |
boolean[] getKeyUsage ()
获取表示KeyUsage
扩展的位的布尔数组(OID = 2.5.29.15)。 密钥使用扩展定义了证书中包含的密钥的用途(例如,加密,签名,证书签名)。 ASN.1对此的定义是:
KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) }RFC 3280 recommends that when used, this be marked as a critical extension.
Returns | |
---|---|
boolean[] |
the KeyUsage extension of this certificate, represented as an array of booleans. The order of KeyUsage values in the array is the same as in the above ASN.1 definition. The array will contain a value for each KeyUsage defined above. If the KeyUsage list encoded in the certificate is longer than the above list, it will not be truncated. Returns null if this certificate does not contain a KeyUsage extension. |
Date getNotAfter ()
从证书的有效期获取notAfter
日期。 有关ASN.1定义,请参阅getNotBefore
。
Returns | |
---|---|
Date |
the end date of the validity period. |
也可以看看:
Date getNotBefore ()
从证书的有效期获取notBefore
日期。 相关的ASN.1定义如下:
validity Validity Validity ::= 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 CertificateSerialNumber CertificateSerialNumber ::= INTEGER
Returns | |
---|---|
BigInteger |
the serial number. |
String getSigAlgName ()
获取证书签名算法的签名算法名称。 一个例子是字符串“SHA256withRSA”。 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
算法名称由 algorithm
OID字符串确定。
Returns | |
---|---|
String |
the signature algorithm name. |
String getSigAlgOID ()
从证书获取签名算法OID字符串。 一个OID由一组由周期分隔的非负整数表示。 例如,字符串“1.2.840.10040.4.3”用RFC 3279: Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and CRL Profile中定义的DSA签名算法标识SHA-1。
相关ASN.1定义见 getSigAlgName
。
Returns | |
---|---|
String |
the signature algorithm OID string. |
byte[] getSigAlgParams ()
从此证书的签名算法中获取DER编码的签名算法参数。 在大多数情况下,签名算法参数为空; 参数通常与证书的公钥一起提供。 如果需要访问各个参数值,则使用AlgorithmParameters
并使用由getSigAlgName
返回的名称进行实例化。
有关ASN.1定义,请参见 getSigAlgName
。
Returns | |
---|---|
byte[] |
the DER-encoded signature algorithm parameters, or null if no parameters are present. |
byte[] getSignature ()
从证书获取signature
值(原始签名位)。 ASN.1对此的定义是:
signature BIT STRING
Returns | |
---|---|
byte[] |
the signature. |
Collection<List<?>> getSubjectAlternativeNames ()
从 SubjectAltName
扩展名获取不可变主题替代名称集合(OID = 2.5.29.17)。
SubjectAltName
扩展的ASN.1定义是:
SubjectAltName ::= GeneralNames GeneralNames :: = SEQUENCE SIZE (1..MAX) OF GeneralName GeneralName ::= CHOICE { otherName [0] OtherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER}
如果此证书不包含SubjectAltName
扩展名,则返回null
。 否则, Collection
将返回一个代表扩展中包含的每个GeneralName
的条目。 每个条目是List
其第一条目是Integer
(名称类型,0-8),其第二条目是String
或字节数组(名称,分别以字符串或ASN.1 DER编码形式)。
RFC 822 ,DNS和URI名称以String
的形式返回,对于这些类型(受RFC 3280中包含的限制)使用完善的字符串格式。 IPv4地址名称使用虚线四舍五入符号返回。 IPv6地址名称以“a1:a2:...:a8”的形式返回,其中a1-a8是表示地址的八个16位段的十六进制值。 OID名称以String
的形式返回,表示为由句点分隔的一系列非负整数。 并且目录名称(专有名称)以RFC 2253字符串格式返回。 没有为其他名称,X.400名称,EDI参与方名称或任何其他类型的名称定义标准字符串格式。 它们作为包含名称的ASN.1 DER编码形式的字节数组返回。
请注意,返回的Collection
可能包含多个相同类型的名称。 另请注意,返回的Collection
是不可变的,并且包含字节数组的所有条目都被克隆以防止后续修改。
此方法已添加到Java 2 Platform Standard Edition的1.4版本中。 为了保持与现有服务提供商的向后兼容性,该方法不是abstract
,它提供了一个默认实现。 子类应该用正确的实现覆盖这个方法。
Returns | |
---|---|
Collection<List<?>> |
an immutable Collection of subject alternative names (or null ) |
Throws | |
---|---|
CertificateParsingException |
if the extension cannot be decoded |
Principal getSubjectDN ()
诋毁 ,取而代之的是getSubjectX500Principal() 。 此方法将subject
作为特定于实现的主体对象返回,这不应被可移植代码所依赖。
从证书获取subject
(主题专有名称)值。 如果subject
值为空,则返回的Principal
对象的getName()
方法返回空字符串(“”)。
ASN.1对此的定义是:
subject Name
见 getIssuerDN
为 Name
和其他相关定义。
Returns | |
---|---|
Principal |
a Principal whose name is the subject name. |
boolean[] getSubjectUniqueID ()
从证书获取 subjectUniqueID
值。
ASN.1对此的定义是:
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL UniqueIdentifier ::= BIT STRING
Returns | |
---|---|
boolean[] |
the subject unique identifier or null if it is not present in the certificate. |
X500Principal getSubjectX500Principal ()
以X500Principal
返回证书中的主题(主题专有名称)值。 如果主题值为空,则返回的X500Principal
对象的getName()
方法返回空字符串(“”)。
建议子类重写此方法。
Returns | |
---|---|
X500Principal |
an X500Principal representing the subject distinguished name |
byte[] getTBSCertificate ()
从此证书获取DER编码的证书信息, tbsCertificate
。 这可以用来独立验证签名。
Returns | |
---|---|
byte[] |
the DER-encoded certificate information. |
Throws | |
---|---|
CertificateEncodingException |
if an encoding error occurs. |
int getVersion ()
从证书获取version
(版本号)值。 ASN.1对此的定义是:
version [0] EXPLICIT Version DEFAULT v1 Version ::= INTEGER { v1(0), v2(1), v3(2) }
Returns | |
---|---|
int |
the version number, i.e. 1, 2 or 3. |
void verify (PublicKey key, Provider sigProvider)
验证是否使用与指定的公钥对应的私钥对该证书进行了签名。 此方法使用由指定提供商提供的签名验证引擎。 请注意,指定的Provider对象不必在提供程序列表中注册。 此方法已添加到Java Platform Standard Edition的1.8版中。 为了保持与现有服务提供商的向后兼容性,该方法不是abstract
,它提供了一个默认实现。
Parameters | |
---|---|
key |
PublicKey : the PublicKey used to carry out the verification. |
sigProvider |
Provider : the signature provider. |
Throws | |
---|---|
NoSuchAlgorithmException |
on unsupported signature algorithms. |
InvalidKeyException |
on incorrect key. |
SignatureException |
on signature errors. |
CertificateException |
on encoding errors. |
UnsupportedOperationException |
if the method is not supported |