JavaTM 2 Platform
Standard Ed. 6

java.security.cert
類別 CertificateFactory

java.lang.Object
  繼承者 java.security.cert.CertificateFactory

public class CertificateFactory
extends Object

此類別定義了用於從相關的編碼中產生證書、證書路徑 (CertPath) 和證書撤消列表 (CRL) 物件的 CertificateFactory 功能。

為了實作多個證書組成的編碼,如果要解析一個可能由多個不相關證書組成的集合時,應使用 generateCertificates。否則,如果要產生 CertPath(證書鏈)並隨後使用 CertPathValidator 驗證它,則應使用 generateCertPath

X.509 的 CertificateFactory 返回的證書必須是 java.security.cert.X509Certificate 的實例,CRL 的 CertificateFactory 返回的證書則必須是 java.security.cert.X509CRL 的實例。

以下範例程式碼讀取一個具有 Base64 編碼證書的檔案,該證書由 -----BEGIN CERTIFICATE----- 語句開始,由 -----END CERTIFICATE----- 語句結束。我們將 FileInputStream(它不支持 markreset)轉換成 BufferedInputStream(它支持這些方法),這樣每次調用 generateCertificate 只需要一個證書,並將輸入串流的讀取位置定位在檔案中的下一個證書處:

 FileInputStream fis = new FileInputStream(filename);
 BufferedInputStream bis = new BufferedInputStream(fis);

 CertificateFactory cf = CertificateFactory.getInstance("X.509");

 while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    System.out.println(cert.toString());
 }
 

以下範例程式碼將解析存儲在檔案中的 PKCS#7 格式的證書答覆,並從中提取所有的證書:

 FileInputStream fis = new FileInputStream(filename);
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 Collection c = cf.generateCertificates(fis);
 Iterator i = c.iterator();
 while (i.hasNext()) {
    Certificate cert = (Certificate)i.next();
    System.out.println(cert);
 }
 

從以下版本開始:
1.2
另請參見:
Certificate, X509Certificate, CertPath, CRL, X509CRL

建構子摘要
protected CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type)
          創建給定型別的 CertificateFactory 物件,並在其中封裝給定的提供者實作(SPI 物件)。
 
方法摘要
 Certificate generateCertificate(InputStream inStream)
          產生一個證書物件,並使用從輸入串流 inStream 中讀取的資料對它進行初始化。
 Collection<? extends Certificate> generateCertificates(InputStream inStream)
          返回從給定輸入串流 inStream 中讀取的證書的集合視圖(可能為空)。
 CertPath generateCertPath(InputStream inStream)
          產生一個 CertPath 物件,並使用從 InputStream inStream 中讀取的資料對它進行初始化。
 CertPath generateCertPath(InputStream inStream, String encoding)
          產生一個 CertPath 物件,並使用從 InputStream inStream 中讀取的資料對它進行初始化。
 CertPath generateCertPath(List<? extends Certificate> certificates)
          產生一個 CertPath 物件,並使用一個 CertificateList 對它進行初始化。
 CRL generateCRL(InputStream inStream)
          產生一個證書撤消列表 (CRL) 物件,並使用從輸入串流 inStream 中讀取的資料對它進行初始化。
 Collection<? extends CRL> generateCRLs(InputStream inStream)
          返回從給定輸入串流 inStream 中讀取的 CRL 的集合視圖(可能為空)。
 Iterator<String> getCertPathEncodings()
          返回此 CertificateFactory 支持的 CertPath 編碼的迭代器,預設編碼方式優先。
static CertificateFactory getInstance(String type)
          返回實作指定證書型別的 CertificateFactory 物件。
static CertificateFactory getInstance(String type, Provider provider)
          返回指定證書型別的 CertificateFactory 物件。
static CertificateFactory getInstance(String type, String provider)
          返回指定證書型別的 CertificateFactory 物件。
 Provider getProvider()
          返回此 CertificateFactory 的提供者。
 String getType()
          返回與此 CertificateFactory 關聯的證書型別的名稱。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

CertificateFactory

protected CertificateFactory(CertificateFactorySpi certFacSpi,
                             Provider provider,
                             String type)
創建給定型別的 CertificateFactory 物件,並在其中封裝給定的提供者實作(SPI 物件)。

參數:
certFacSpi - 提供者實作。
provider - 提供者。
type - 證書型別。
方法詳細資訊

getInstance

public static final CertificateFactory getInstance(String type)
                                            throws CertificateException
返回實作指定證書型別的 CertificateFactory 物件。

此方法從首選提供者開始遍歷已註冊安全提供者列表。返回封裝 CertificateFactorySpi 實作的新 CertificateFactory 物件,該實作取自第一個支持指定型別的 Provider。

注意,可以通過 Security.getProviders() 方法獲取已註冊提供者列表。

參數:
type - 所請求的證書型別的名稱。有關標準證書型別的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
返回:
指定型別的 CertificateFactory 物件。
拋出:
CertificateException - 如果沒有 Provider 支持指定型別的 CertificateFactorySpi 實作。
另請參見:
Provider

getInstance

public static final CertificateFactory getInstance(String type,
                                                   String provider)
                                            throws CertificateException,
                                                   NoSuchProviderException
返回指定證書型別的 CertificateFactory 物件。

返回封裝 CertificateFactorySpi 實作的新 CertificateFactory 物件,該實作取自指定提供者。指定提供者必須在安全提供者列表中註冊。

注意,可以通過 Security.getProviders() 方法獲取已註冊提供者列表。

參數:
type - 證書型別。有關標準證書型別的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
provider - 提供者的名稱。
返回:
指定型別的 CertificateFactory 物件。
拋出:
CertificateException - 如果指定演算法的 CertificateFactorySpi 實作不能從指定提供者獲得。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中註冊。
IllegalArgumentException - 如果提供者的名稱為 null 或空。
另請參見:
Provider

getInstance

public static final CertificateFactory getInstance(String type,
                                                   Provider provider)
                                            throws CertificateException
返回指定證書型別的 CertificateFactory 物件。

返回封裝 CertificateFactorySpi 實作的新 CertificateFactory 物件,該實作取自指定 Provider 物件。注意,指定 Provider 物件並不一定要在提供者列表中註冊。

參數:
type - 證書型別。有關標準證書型別的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
provider - 提供者。
返回:
指定型別的 CertificateFactory 物件。
拋出:
CertificateException - 如果指定演算法的 CertificateFactorySpi 實作不能從指定提供者物件獲得。
IllegalArgumentException - 如果 provider 為 null。
從以下版本開始:
1.4
另請參見:
Provider

getProvider

public final Provider getProvider()
返回此 CertificateFactory 的提供者。

返回:
此 CertificateFactory 的提供者。

getType

public final String getType()
返回與此 CertificateFactory 關聯的證書型別的名稱。

返回:
與此 CertificateFactory 關聯的證書型別的名稱。

generateCertificate

public final Certificate generateCertificate(InputStream inStream)
                                      throws CertificateException
產生一個證書物件,並使用從輸入串流 inStream 中讀取的資料對它進行初始化。

為了利用受此 CertificateFactory 支持的專門的證書格式,可將返回的證書物件的型別強制轉換為相應的證書類別。例如,如果此 CertificateFactory 實作 X.509 證書,則可將返回的證書物件的型別強制轉換為 X509Certificate 類別。

在用於 X.509 證書的 CertificateFactory 情況中,inStream 中提供的證書必須是 DER 編碼的,並且可以用二進制或可列印的 (Base64) 編碼形式提供。如果以 Base64 編碼的形式提供該證書,則該證書必須由 -----BEGIN CERTIFICATE----- 語句開始,由 -----END CERTIFICATE----- 語句結束。

注意,如果給定的輸入串流不支持 markreset,則此方法將使用整個輸入串流。否則,每次調用此方法都需要一個證書,並且將輸入串流的讀取位置定位在固有的證書結尾標記後的下一個可用位元組處。如果輸入串流中的資料不包含固有的證書結尾標記(不同於 EOF),並且在解析該證書後有一個尾隨資料,則將拋出 CertificateException

參數:
inStream - 帶有證書資料的輸入串流。
返回:
已使用輸入串流中的資料初始化的證書物件。
拋出:
CertificateException - 如果發生解析錯誤。

getCertPathEncodings

public final Iterator<String> getCertPathEncodings()
返回此 CertificateFactory 支持的 CertPath 編碼的迭代器,預設編碼方式優先。有關標準編碼名稱及其格式的資訊,請參見 Java Certification Path API Programmer's Guide 中的附錄 A。

試圖修改返回的 Iterator(通過其 remove 方法)會導致拋出 UnsupportedOperationException

返回:
在受支持的 CertPath 編碼名稱(以 String 的形式)上進行迭代的 Iterator
從以下版本開始:
1.4

generateCertPath

public final CertPath generateCertPath(InputStream inStream)
                                throws CertificateException
產生一個 CertPath 物件,並使用從 InputStream inStream 中讀取的資料對它進行初始化。假定資料是以預設編碼方式進行編碼的。預設編碼名稱是 getCertPathEncodings 方法返回的 Iterator 的第一個元素。

參數:
inStream - 套件含資料的 InputStream
返回:
已使用 InputStream 中的資料初始化的 CertPath
拋出:
CertificateException - 如果解碼時出現異常
從以下版本開始:
1.4

generateCertPath

public final CertPath generateCertPath(InputStream inStream,
                                       String encoding)
                                throws CertificateException
產生一個 CertPath 物件,並使用從 InputStream inStream 中讀取的資料對它進行初始化。假定資料是以指定的編碼方式進行編碼的。有關標準編碼名稱及其格式的資訊,請參見 Java Certification Path API Programmer's Guide 中的附錄 A。

參數:
inStream - 套件含資料的 InputStream
encoding - 資料使用的編碼
返回:
已使用 InputStream 中的資料初始化的 CertPath
拋出:
CertificateException - 如果解碼時出現異常或者不支持所請求的編碼
從以下版本開始:
1.4

generateCertPath

public final CertPath generateCertPath(List<? extends Certificate> certificates)
                                throws CertificateException
產生一個 CertPath 物件,並使用一個 CertificateList 對它進行初始化。

所提供的證書必須是該 CertificateFactory 支持的型別。將從提供的 List 物件中複製出這些證書。

參數:
certificates - CertificateList
返回:
已使用所提供的證書列表初始化的 CertPath
拋出:
CertificateException - 如果出現異常
從以下版本開始:
1.4

generateCertificates

public final Collection<? extends Certificate> generateCertificates(InputStream inStream)
                                                             throws CertificateException
返回從給定輸入串流 inStream 中讀取的證書的集合視圖(可能為空)。

為了利用此 CertificateFactory 所支持的特殊證書格式,可將返回的集合視圖中的每個元素的型別強制轉換為相應的證書類別。例如,如果此 CertificateFactory 實作 X.509 證書,則可將返回集合中的元素的型別強制轉換為 X509Certificate 類別。

在用於 X.509 證書的 CertificateFactory 的情況中,inStream 可能包含一個 DER 編碼的證書序列,這些證書使用 generateCertificate 所描述的格式。另外,inStream 可能包含一個 PKCS#7 證書鏈。這是一個 PKCS#7 SignedData 物件,具有唯一認可 的有效欄位。需要特別指出的是,簽章和內容會被忽略。此格式允許同時下載多個證書。如果沒有證書,則返回一個空集合。

注意,如果給定的輸入串流不支持 markreset,則此方法將使用整個輸入串流。

參數:
inStream - 帶有證書的輸入串流。
返回:
java.security.cert.Certificate 物件的集合視圖(可能為空),用輸入串流中的資料對該物件進行初始化。
拋出:
CertificateException - 如果發生解析錯誤。

generateCRL

public final CRL generateCRL(InputStream inStream)
                      throws CRLException
產生一個證書撤消列表 (CRL) 物件,並使用從輸入串流 inStream 中讀取的資料對它進行初始化。

為了利用此受 CertificateFactory 支持的專門的 CRL 格式,可將返回的 CRL 物件的型別強制轉換為相應的 CRL 類別。例如,如果此 CertificateFactory 實作 X.509 CRL,則可將返回的 CRL 物件的型別強制轉換為 X509CRL 類別。

注意,如果給定的輸入串流不支持 markreset,則此方法將使用整個輸入串流。否則,每次調用此方法都需要一個 CRL,並且將輸入串流的讀取位置定位在固有 CRL 結尾標記後的下一個可用位元組處。如果輸入串流中的資料不包含固有的 CRL 結尾標記(不同於 EOF),並且在解析該 CRL 後有一個尾隨資料,則將拋出 CRLException

參數:
inStream - 帶有 CRL 資料的輸入串流。
返回:
已使用輸入串流中的資料初始化的 CRL 物件。
拋出:
CRLException - 如果發生解析錯誤。

generateCRLs

public final Collection<? extends CRL> generateCRLs(InputStream inStream)
                                             throws CRLException
返回從給定輸入串流 inStream 中讀取的 CRL 的集合視圖(可能為空)。

為了利用受此 CertificateFactory 支持的專門的 CRL 格式,可將返回的集合視圖中的每個元素的型別強制轉換為相應的 CRL 類別。例如,如果此 CertificateFactory 實作 X.509 CRL,則可將返回集合中的元素型別強制轉換為 X509CRL 類別。

在用於 X.509 CRL 的 CertificateFactory 情況中,inStream 可能包含一個 DER 編碼的 CRL 序列。另外,inStream 可能包含一個 PKCS#7 CRL 集合。這是一個 PKCS#7 SignedData 物件,具有唯一被 crl 的有效欄位。需要特別指出的是,簽章和內容會被忽略。此格式允許同時下載多個 CRL。如果沒有 CRL,則返回一個空集合。

注意,如果給定的輸入串流不支持 markreset,則此方法將使用整個輸入串流。

參數:
inStream - 帶有 CRL 的輸入串流。
返回:
java.security.cert.CRL 物件的集合視圖(可能為空),用輸入串流中的資料對該物件進行初始化。
拋出:
CRLException - 如果發生解析錯誤。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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