JavaTM 2 Platform
Standard Ed. 6

java.security.cert
介面 X509Extension

所有已知實作類別:
X509Certificate, X509CRL, X509CRLEntry

public interface X509Extension

X.509 擴展的介面。

為 X.509 v3 Certificates 和 v2 CRLs(證書撤消列表)所定義的擴展提供了各種方法,用於將其他屬性與使用者或公鑰相關聯、管理證書層次結構和管理 CRL 的分發。X.509 擴展格式還允許各種團體定義私有擴展,以承載這些團體的惟一資訊。

證書/CRL 中的每種擴展都可以指定為關鍵的或非關鍵的。如果使用證書/CRL 的系統(驗證證書/CRL 的應用程序)遇到了它無法識別的關鍵擴展,則它必須拒絕該證書/CRL。如果該系統無法識別非關鍵擴展,則可將其忽略。

此內容的 ASN.1 定義如下:

 Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension

 Extension  ::=  SEQUENCE  {
     extnId        OBJECT IDENTIFIER,
     critical      BOOLEAN DEFAULT FALSE,
     extnValue     OCTET STRING
                   -- contains a DER encoding of a value
                   -- of the type registered for use with
                   -- the extnId object identifier value
 }
 
由於並非所有的擴展都是已知的,所以 getExtensionValue 方法返回擴展值(也就是 extnValue)的 DER 編碼形式的 OCTET STRING。然後可由識別該擴展的類別 來處理該返回值。


方法摘要
 Set<String> getCriticalExtensionOIDs()
          獲取實作此介面的物件所管理的證書/CRL 中,被標記為 CRITICAL 的擴展的 OID 字元串 Set。
 byte[] getExtensionValue(String oid)
          獲取擴展值 (extnValue) 的 DER 編碼 OCTET 字元串,該擴展值由傳入的 oid String 標識。
 Set<String> getNonCriticalExtensionOIDs()
          獲取實作此介面的物件所管理的證書/CRL 中,被標記為 NON-CRITICAL 的擴展的 OID 字元串 Set。
 boolean hasUnsupportedCriticalExtension()
          檢查是否存在不支持的關鍵擴展。
 

方法詳細資訊

hasUnsupportedCriticalExtension

boolean hasUnsupportedCriticalExtension()
檢查是否存在不支持的關鍵擴展。

返回:
如果找到了不支持的關鍵擴展,則返回 true;否則返回 false

getCriticalExtensionOIDs

Set<String> getCriticalExtensionOIDs()
獲取實作此介面的物件所管理的證書/CRL 中,被標記為 CRITICAL 的擴展的 OID 字元串 Set。 下面的範例程式碼從 X509Certificate 中獲取一個關鍵擴展的 Set 並列印 OID:

 InputStream inStrm = new FileInputStream("DER-encoded-Cert");
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 X509Certificate cert = (X509Certificate)cf.generateCertificate(inStrm);
 inStrm.close();

Set critSet = cert.getCriticalExtensionOIDs(); if (critSet != null && !critSet.isEmpty()) { System.out.println("Set of critical extensions:"); for (Iterator i = critSet.iterator(); i.hasNext();) { String oid = (String)i.next(); System.out.println(oid); } }

返回:
標記為關鍵擴展的擴展 OID 字元串 Set(如果沒有標記為關鍵的擴展,則返回一個空 Set)。如果根本沒有擴展,則此方法返回 null。

getNonCriticalExtensionOIDs

Set<String> getNonCriticalExtensionOIDs()
獲取實作此介面的物件所管理的證書/CRL 中,被標記為 NON-CRITICAL 的擴展的 OID 字元串 Set。 下面的範例程式碼從 X509CRL 已撤消證書項中獲取一個非關鍵擴展的 Set 並列印 OID:

 InputStream inStrm = new FileInputStream("DER-encoded-CRL");
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 X509CRL crl = (X509CRL)cf.generateCRL(inStrm);
 inStrm.close();

byte[] certData = <DER-encoded certificate data> ByteArrayInputStream bais = new ByteArrayInputStream(certData); X509Certificate cert = (X509Certificate)cf.generateCertificate(bais); bais.close(); X509CRLEntry badCert = crl.getRevokedCertificate(cert.getSerialNumber());

if (badCert != null) { Set nonCritSet = badCert.getNonCriticalExtensionOIDs();

if (nonCritSet != null) for (Iterator i = nonCritSet.iterator(); i.hasNext();) { String oid = (String)i.next(); System.out.println(oid); } }

返回:
標記為非關鍵擴展的擴展 OID 字元串 Set(如果沒有標記為非關鍵的擴展,則返回一個空 Set)。如果根本沒有擴展,則此方法返回 null。

getExtensionValue

byte[] getExtensionValue(String oid)
獲取擴展值 (extnValue) 的 DER 編碼 OCTET 字元串,該擴展值由傳入的 oid String 標識。該 oid 字元串由一組句點分隔的非負整數集來表示。

例如:

OID(物件標識符) 擴展名
2.5.29.14 SubjectKeyIdentifier
2.5.29.15 KeyUsage
2.5.29.16 PrivateKeyUsage
2.5.29.17 SubjectAlternativeName
2.5.29.18 IssuerAlternativeName
2.5.29.19 BasicConstraints
2.5.29.30 NameConstraints
2.5.29.33 PolicyMappings
2.5.29.35 AuthorityKeyIdentifier
2.5.29.36 PolicyConstraints

參數:
oid - 該擴展的物件標識符值。
返回:
擴展值的 DER 編碼的八位位元組字元串,如果不存在,則返回 null。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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