JavaTM 2 Platform
Standard Ed. 6

javax.security.cert
類別 X509Certificate

java.lang.Object
  繼承者 javax.security.cert.Certificate
      繼承者 javax.security.cert.X509Certificate

public abstract class X509Certificate
extends Certificate

X.509 v1 證書的抽象類別。此類別提供了一種存取 X.509 v1 證書所有屬性的標準方式。無法通過此介面提供專用於 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。

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 證書的程式碼都要尋找 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 屬性的值。如果未設置此安全屬性,則使用預設實作。目前,由於對安全屬性的存取可能有安全限制,所以在類別初始化時尋找並快取記憶體此值,如果無法存取安全屬性,則退而使用預設實作。

註:包 javax.security.cert 中的類別用於與早期版本的 Java 安全Socket擴展(Java Secure Socket Extension,JSSE)保持相容。新的應用程序應該使用 java.security.cert 中的標準 Java SE 證書類別。

從以下版本開始:
1.4
另請參見:
Certificate, X509Extension

建構子摘要
X509Certificate()
           
 
方法摘要
abstract  void checkValidity()
          檢查證書目前是否有效。
abstract  void checkValidity(Date date)
          檢查指定的日期是否處於證書的有效期內。
static X509Certificate getInstance(byte[] certData)
          實例化一個 X509Certificate 物件,並使用指定的 byte 陣列初始化它。
static 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(版本號)值。
 
從類別 javax.security.cert.Certificate 繼承的方法
equals, getEncoded, getPublicKey, hashCode, toString, verify, verify
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

X509Certificate

public X509Certificate()
方法詳細資訊

getInstance

public static final X509Certificate getInstance(InputStream inStream)
                                         throws CertificateException
實例化一個 X509Certificate 物件,並使用從輸入串流 inStream 讀取的資料初始化它。在安全屬性檔案中,屬性 cert.provider.x509v1 的值指定了一個類別,而這個類別提供了該實作(X509Certificate 是一個抽象類別)。

註:期望輸入串流中只有一個 DER 編碼的證書。另外,所有 X509Certificate 子類別必須提供以下形式的建構子:

 public <subClass>(InputStream inStream) ...
 

參數:
inStream - 輸入串流,為了初始化該證書而要從中讀取資料。
返回:
使用從輸入串流中讀取的資料初始化了的X509Certificate 物件。
拋出:
CertificateException - 如果發生類別初始化或證書解析錯誤。

getInstance

public static final X509Certificate getInstance(byte[] certData)
                                         throws CertificateException
實例化一個 X509Certificate 物件,並使用指定的 byte 陣列初始化它。由指定為安全屬性檔案中 cert.provider.x509v1 屬性值的類別來提供該實作(X509Certificate 是一個抽象類別)。

註:所有 X509Certificate 子類別必須提供以下形式的建構子:

 public <subClass>(InputStream inStream) ...
 

參數:
certData - 套件含 DER 編碼證書的 byte 陣列。
返回:
X509Certificate 物件,已使用 certData 中的資料初始化該物件。
拋出:
CertificateException - 如果發生類別初始化或證書解析錯誤。

checkValidity

public abstract void checkValidity()
                            throws CertificateExpiredException,
                                   CertificateNotYetValidException
檢查證書目前是否有效。即當前的日期和時間是否仍在證書中所給定的有效期內。

有效期由兩個日期/時間值組成:證書有效的起始日期(和時間)和終止日期(和時間)。用 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
檢查指定的日期是否處於證書的有效期內。換句話說,這確定該證書在指定的日期/時間是否有效。

參數:
date - 要檢查的 Date,以確定此證書在該日期/時間是否有效。
拋出:
CertificateExpiredException - 如果對於所提供的 date 而言該證書已過期。
CertificateNotYetValidException - 如果對於所提供的 date 而言該證書不再有效。
另請參見:
checkValidity()

getVersion

public abstract int getVersion()
獲取證書的 version(版本號)值。此內容的 ASN.1 定義如下:
 version         [0]  EXPLICIT Version DEFAULT v1

Version ::= INTEGER { v1(0), v2(1), v3(2) }

返回:
ASN.1 編碼形式的版本號,即 0、1 或 2。

getSerialNumber

public abstract BigInteger getSerialNumber()
獲取證書的 serialNumber 值。序列號是證書頒發機構為每個證書所分派的一個整數。給定的 CA 所發佈的每個證書的序列號必須是唯一的(即發佈方名稱和序列號標識一個唯一的證書)。此內容的 ASN.1 定義如下:
 serialNumber     CertificateSerialNumber

CertificateSerialNumber ::= INTEGER

返回:
序列號。

getIssuerDN

public abstract 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

Name 描述了一個層次結構名,由屬性(如國家/地區名)和相應值(如 US)組成。AttributeValue 元件的型別由 AttributeType 來確定;一般是 directoryStringdirectoryString 通常是 PrintableStringTeletexStringUniversalString 之一。

返回:
一個 Principal,其名稱是發佈方的標識名。

getSubjectDN

public abstract Principal getSubjectDN()
獲取證書的 subject(主體的標識名)值。此內容的 ASN.1 定義如下:
 subject    Name
 

有關 Name 和其他相關定義,請參閱 getIssuerDN

返回:
一個 Principal,其名稱是主體名。
另請參見:
getIssuerDN()

getNotBefore

public abstract Date getNotBefore()
獲取證書有效期的 notBefore 日期。相關的 ASN.1 定義如下:
 validity             Validity

Validity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }

CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }

返回:
有效期的起始日期。
另請參見:
checkValidity()

getNotAfter

public abstract Date getNotAfter()
獲取證書有效期的 notAfter 日期。相關的 ASN.1 定義,請參閱 getNotBefore

返回:
有效期的終止日期。
另請參見:
checkValidity()

getSigAlgName

public abstract String getSigAlgName()
獲取用於該證書籤名演算法的名稱。例如字元串 "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

根據 algorithm OID 字元串確定該演算法名。

返回:
簽章演算法名。

getSigAlgOID

public abstract String getSigAlgOID()
獲取證書的簽章演算法 OID 字元串。OID 由一組句點分隔的正數來表示。例如,按照 PKIX 部分 I 中的規定,字元串 "1.2.840.10040.4.3" 標識使用 DSA 簽章演算法的 SHA-1。

相關的 ASN.1 定義,請參閱 getSigAlgName

返回:
簽章演算法 OID 字元串。

getSigAlgParams

public abstract byte[] getSigAlgParams()
從此證書的簽章演算法中獲取 DER 編碼形式的簽章演算法參數。在大多數情況下,該簽章演算法參數為 null;參數通常是與證書的公鑰一起提供的。

相關的 ASN.1 定義,請參閱 getSigAlgName

返回:
DER 編碼形式的簽章演算法參數,如果沒有該參數,則返回 null。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only