Most visited

Recently visited

Added in API level 1

X509Certificate

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证书类。

也可以看看:

Summary

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对象,并使用从输入流 inStream读取的数据初始化它。

abstract Principal getIssuerDN()

从证书获取 issuer (发行者专有名称)值。

abstract Date getNotAfter()

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

abstract Date getNotBefore()

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

abstract BigInteger getSerialNumber()

从证书获取 serialNumber值。

abstract String getSigAlgName()

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

abstract String getSigAlgOID()

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

abstract byte[] getSigAlgParams()

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

abstract Principal getSubjectDN()

从证书获取 subject (主题专有名称)值。

abstract int getVersion()

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

Inherited methods

From class javax.security.cert.Certificate
From class java.lang.Object

Public constructors

X509Certificate

Added in API level 1
X509Certificate ()

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.

也可以看看:

getInstance

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

getInstance

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

getIssuerDN

Added in API level 1
Principal getIssuerDN ()

从证书获取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.

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 ()

获取证书签名算法的签名算法名称。 一个例子是字符串“SHA-1 / DSA”。 ASN.1对此的定义是:

 signatureAlgorithm   AlgorithmIdentifier

AlgorithmIdentifier :: = SEQUENCE {algorithm OBJECT IDENTIFIER,参数ANY DEFINED BY algorithm OPTIONAL} - 包含一个类型值 - 注册用于 - 算法对象标识符值

算法名称由 algorithm OID字符串确定。

Returns
String the signature algorithm name.

getSigAlgOID

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

getSigAlgParams

Added in API level 1
byte[] getSigAlgParams ()

从此证书的签名算法中获取DER编码的签名算法参数。 在大多数情况下,签名算法参数为空; 参数通常与证书的公钥一起提供。

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

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

getSubjectDN

Added in API level 1
Principal getSubjectDN ()

从证书获取subject (主题专有名称)值。 ASN.1对此的定义是:

 subject    Name
 

getIssuerDNName和其他相关定义。

Returns
Principal a Principal whose name is the subject name.

也可以看看:

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 from the ASN.1 encoding, i.e. 0, 1 or 2.

Hooray!