Most visited

Recently visited

Added in API level 1

X509Certificate

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);
 }
 

也可以看看:

Summary

Protected constructors

X509Certificate()

X.509证书的构造函数。

Public methods

abstract void checkValidity()

检查证书当前是否有效。

abstract void checkValidity(Date date)

检查给定日期是否在证书的有效期内。

abstract int getBasicConstraints()

从关键 BasicConstraints扩展中获取证书约束路径长度(OID = 2.5.29.19)。

List<String> getExtendedKeyUsage()

获取表示扩展密钥使用扩展(OID = 2.5.29.37)的 ExtKeyUsageSyntax字段的OBJECT IDENTIFIER的字符串的不可修改列表。

Collection<List<?>> getIssuerAlternativeNames()

IssuerAltName扩展名(OID = 2.5.29.18)获取发行者替代名称的不可变集合。

abstract Principal getIssuerDN()

贬低 ,由 getIssuerX500Principal()取代。

abstract boolean[] getIssuerUniqueID()

从证书获取 issuerUniqueID值。

X500Principal getIssuerX500Principal()

X500Principal身份从证书中返回颁发者(颁发机构专有名称)值。

abstract boolean[] getKeyUsage()

获取表示 KeyUsage扩展的位的布尔数组(OID = 2.5.29.15)。

abstract Date getNotAfter()

从证书的有效期获取 notAfter日期。

abstract Date getNotBefore()

从证书的有效期获取 notBefore日期。

abstract BigInteger getSerialNumber()

从证书获取 serialNumber值。

abstract String getSigAlgName()

获取证书签名算法的签名算法名称。

abstract String getSigAlgOID()

从证书获取签名算法OID字符串。

abstract byte[] getSigAlgParams()

从此证书的签名算法中获取DER编码的签名算法参数。

abstract byte[] getSignature()

从证书获取 signature值(原始签名位)。

Collection<List<?>> getSubjectAlternativeNames()

SubjectAltName扩展名(OID = 2.5.29.17)获取不可变主题备用名称集合。

abstract Principal getSubjectDN()

诋毁 ,取而代之的是 getSubjectX500Principal()

abstract boolean[] getSubjectUniqueID()

获取证书的 subjectUniqueID值。

X500Principal getSubjectX500Principal()

X500Principal返回证书中的主题(主题专有名称)值。

abstract byte[] getTBSCertificate()

从此证书获取DER编码的证书信息, tbsCertificate

abstract int getVersion()

从证书获取 version (版本号)值。

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

Protected constructors

X509Certificate

Added in API level 1
X509Certificate ()

X.509证书的构造函数。

Public methods

checkValidity

Added in API level 1
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.

checkValidity

Added in API level 1
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.

也可以看看:

getBasicConstraints

Added in API level 1
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.

getExtendedKeyUsage

Added in API level 1
List<String> getExtendedKeyUsage ()

获取代表扩展密钥使用扩展(OID = 2.5.29.37)的ExtKeyUsageSyntax字段的OBJECT IDENTIFIER的字符串的不可修改列表。 它表示可以使用经过认证的公钥的一个或多个目的,此外或代替在关键用途扩展字段中指示的基本目的。 ASN.1对此的定义是:

 ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId

 KeyPurposeId ::= OBJECT IDENTIFIER
 
Key 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

getIssuerAlternativeNames

Added in API level 1
Collection<List<?>> getIssuerAlternativeNames ()

IssuerAltName扩展名(OID = 2.5.29.18)获取不可变的发行者替代名称集合。

IssuerAltName扩展的ASN.1定义是:

 IssuerAltName ::= GeneralNames
 
The 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

getIssuerDN

Added in API level 1
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 ::= ANY
 
The 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.

getIssuerUniqueID

Added in API level 1
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.

getIssuerX500Principal

Added in API level 1
X500Principal getIssuerX500Principal ()

X500Principal从证书中返回颁发者(颁发机构专有名称)值。

建议子类重写此方法。

Returns
X500Principal an X500Principal representing the issuer distinguished name

getKeyUsage

Added in API level 1
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.

getNotAfter

Added in API level 1
Date getNotAfter ()

从证书的有效期获取notAfter日期。 有关ASN.1定义,请参阅getNotBefore

Returns
Date the end date of the validity period.

也可以看看:

getNotBefore

Added in API level 1
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.

也可以看看:

getSerialNumber

Added in API level 1
BigInteger getSerialNumber ()

获取证书的serialNumber值。 序列号是证书颁发机构为每个证书分配的整数。 对于给定CA颁发的每个证书而言,它必须是唯一的(即,颁发者名称和序列号标识唯一证书)。 ASN.1对此的定义是:

 serialNumber     CertificateSerialNumber

 CertificateSerialNumber  ::=  INTEGER
 

Returns
BigInteger the serial number.

getSigAlgName

Added in API level 1
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.

getSigAlgOID

Added in API level 1
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.

getSigAlgParams

Added in API level 1
byte[] getSigAlgParams ()

从此证书的签名算法中获取DER编码的签名算法参数。 在大多数情况下,签名算法参数为空; 参数通常与证书的公钥一起提供。 如果需要访问各个参数值,则使用AlgorithmParameters并使用由getSigAlgName返回的名称进行实例化。

有关ASN.1定义,请参见 getSigAlgName

Returns
byte[] the DER-encoded signature algorithm parameters, or null if no parameters are present.

getSignature

Added in API level 1
byte[] getSignature ()

从证书获取signature值(原始签名位)。 ASN.1对此的定义是:

 signature     BIT STRING
 

Returns
byte[] the signature.

getSubjectAlternativeNames

Added in API level 1
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

getSubjectDN

Added in API level 1
Principal getSubjectDN ()

诋毁 ,取而代之的是getSubjectX500Principal() 此方法将subject作为特定于实现的主体对象返回,这不应被可移植代码所依赖。

从证书获取subject (主题专有名称)值。 如果subject值为空,则返回的Principal对象的getName()方法返回空字符串(“”)。

ASN.1对此的定义是:

 subject    Name
 

getIssuerDNName和其他相关定义。

Returns
Principal a Principal whose name is the subject name.

getSubjectUniqueID

Added in API level 1
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.

getSubjectX500Principal

Added in API level 1
X500Principal getSubjectX500Principal ()

X500Principal返回证书中的主题(主题专有名称)值。 如果主题值为空,则返回的X500Principal对象的getName()方法返回空字符串(“”)。

建议子类重写此方法。

Returns
X500Principal an X500Principal representing the subject distinguished name

getTBSCertificate

Added in API level 1
byte[] getTBSCertificate ()

从此证书获取DER编码的证书信息, tbsCertificate 这可以用来独立验证签名。

Returns
byte[] the DER-encoded certificate information.
Throws
CertificateEncodingException if an encoding error occurs.

getVersion

Added in API level 1
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.

verify

Added in API level 24
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

Hooray!