|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.security.cert.Certificate java.security.cert.X509Certificate
public abstract class X509Certificate
X.509 證書的抽象類別。此類別提供了一種存取 X.509 證書所有屬性的標準方式。
1996 年 6 月,ISO/IEC 和 ANSI X9 完成了基本的 X.509 v3 格式,在 ASN.1 中描述如下:
Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING }
這些證書被廣泛使用以支持 Internet 安全系統中的身份驗證和其他功能。常見的應用包括增強保密郵件 (PEM)、傳輸層安全 (SSL)、用於受信任軟體發佈的程式碼簽章和安全電子交易 (SET)。
由證書頒發機構 (CA) 來管理和擔保這些證書。CA 的工作是創建證書,方法是將資料置於 X.509 標準格式,然後以數字方式簽署該資料。CA 充當受信任的第三方,在不能直接通信的主體之間傳遞資訊。CA 證書可由其自身簽章,也可由其他 CA 簽章,如“根”CA。
在 RFC 2459,即 "Internet X.509 Public Key Infrastructure Certificate and CRL Profile"(位於 http://www.ietf.org/rfc/rfc2459.txt )中可找到更多資訊。
tbsCertificate
的 ASN.1 定義是:
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 證書。
InputStream inStream = new FileInputStream("fileName-of-cert"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); inStream.close();
Certificate
,
CertificateFactory
,
X509Extension
,
序列化表格巢狀類別摘要 |
---|
從類別 java.security.cert.Certificate 繼承的巢狀類別/介面 |
---|
Certificate.CertificateRep |
建構子摘要 | |
---|---|
protected |
X509Certificate()
X.509 證書的建構子。 |
方法摘要 | |
---|---|
abstract void |
checkValidity()
檢查證書目前是否有效。 |
abstract void |
checkValidity(Date date)
檢查給定的日期是否處於證書的有效期內。 |
abstract int |
getBasicConstraints()
從關鍵 BasicConstraints 擴展 (OID = 2.5.29.19) 中獲取證書的限制路徑長度。 |
List<String> |
getExtendedKeyUsage()
獲取一個不可修改的 String 列表,表示已擴展的密鑰使用擴展 (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) 的各個位的 boolean 陣列。 |
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 (版本號)值。 |
從類別 java.security.cert.Certificate 繼承的方法 |
---|
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace |
從類別 java.lang.Object 繼承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
從介面 java.security.cert.X509Extension 繼承的方法 |
---|
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension |
建構子詳細資訊 |
---|
protected X509Certificate()
方法詳細資訊 |
---|
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
有效期由兩個日期/時間值組成:證書有效的起始和終止日期(和時間)。在 ASN.1 中定義如下:
validity ValidityValidity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
CertificateExpiredException
- 如果證書已過期。
CertificateNotYetValidException
- 如果證書不再有效。public abstract void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException
date
- 要檢查的 Date,以確定此證書在該日期/時間是否有效。
CertificateExpiredException
- 如果對於所提供的 date
而言該證書已過期。
CertificateNotYetValidException
- 如果對於所提供的 date
而言該證書不再有效。checkValidity()
public abstract int getVersion()
version
(版本號)值。此內容的 ASN.1 定義如下:
version [0] EXPLICIT Version DEFAULT v1Version ::= INTEGER { v1(0), v2(1), v3(2) }
public abstract BigInteger getSerialNumber()
serialNumber
值。序列號是證書頒發機構為每個證書所分派的一個整數。給定的 CA 所發佈的每個證書的序列號必須是唯一的(即發佈方名稱和序列號標識一個唯一的證書)。此內容的 ASN.1 定義如下:
serialNumber CertificateSerialNumberCertificateSerialNumber ::= INTEGER
public abstract Principal getIssuerDN()
issuer
,可移植的程式碼不應依靠該物件。
獲取證書的 issuer
(發佈方的標識名)值。發佈方名稱標識了簽署(共時布)該證書的實體。
發佈方名稱欄位包含一個 X.500 標識名 (DN)。此內容的 ASN.1 定義如下:
issuer NameName ::= CHOICE { RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET OF AttributeValueAssertion AttributeValueAssertion ::= SEQUENCE { AttributeType, AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY
Name
描述了一個層次結構名,由屬性(如國家/地區名)和相應值(如 US)組成。AttributeValue
元件的型別由 AttributeType
來確定;一般是 directoryString
。directoryString
通常是 PrintableString
、TeletexString
或 UniversalString
之一。
public X500Principal getIssuerX500Principal()
X500Principal
的形式返回證書的發佈方(發佈方標識名)值。
建議子類別覆寫此方法。
X500Principal
public abstract Principal getSubjectDN()
subject
,可移植的程式碼不應依靠該物件。
獲取證書的 subject
(主體的標識名)值。如果 subject
值為空,則返回的 Principal
物件的 getName()
方法將返回一個空字元串 ("")。
此內容的 ASN.1 定義如下:
subject Name
有關 Name
和其他相關定義的資訊,請參見 getIssuerDN
。
public X500Principal getSubjectX500Principal()
X500Principal
的形式返回證書的主體(主體標識名)值。如果 subject 值為空,則返回的 X500Principal
物件的 getName()
方法將返回一個空字元串 ("")。
建議子類別覆寫此方法。
X500Principal
public abstract Date getNotBefore()
notBefore
日期。相關的 ASN.1 定義如下:
validity ValidityValidity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
checkValidity()
public abstract Date getNotAfter()
notAfter
日期。有關相關的 ASN.1 定義,請參見 getNotBefore
。
checkValidity()
public abstract byte[] getTBSCertificate() throws CertificateEncodingException
tbsCertificate
。這可用於獨立驗證簽章。
CertificateEncodingException
- 如果發生編碼錯誤。public abstract byte[] getSignature()
signature
值(原始簽章位)。此內容的 ASN.1 定義如下:
signature BIT STRING
public abstract String getSigAlgName()
signatureAlgorithm AlgorithmIdentifierAlgorithmIdentifier ::= 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 字元串確定該演算法名。
public abstract String getSigAlgOID()
有關相關的 ASN.1 定義,請參見 getSigAlgName
。
public abstract byte[] getSigAlgParams()
AlgorithmParameters
,並使用 getSigAlgName
所返回的名稱進行實例化。
有關相關的 ASN.1 定義,請參見 getSigAlgName
。
public abstract boolean[] getIssuerUniqueID()
issuerUniqueID
值。證書中發佈方的唯一標識符用於處理以後可能出現的發佈方名稱重用的情況。RFC 2459 建議不重用該名稱,並建議合格的證書不要使用唯一標識符。遵守該配置檔案的應用程序應該能夠解析唯一標識符並進行比較。
此內容的 ASN.1 定義如下:
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONALUniqueIdentifier ::= BIT STRING
public abstract boolean[] getSubjectUniqueID()
subjectUniqueID
值。
此內容的 ASN.1 定義如下:
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONALUniqueIdentifier ::= BIT STRING
public abstract boolean[] getKeyUsage()
KeyUsage
擴展 (OID = 2.5.29.15) 的各個位的 boolean 陣列。KeyUsage 擴展定義證書中所含密鑰的目的(如編碼、簽章、證書籤署)。此內容的 ASN.1 定義如下:
KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) }RFC 2459 建議,使用該擴展時將其標記為關鍵擴展。
public List<String> getExtendedKeyUsage() throws CertificateParsingException
ExtKeyUsageSyntax
欄位的物件標識符(OBJECT IDENTIFIER)。除了或代替 KeyUsage 擴展欄位中所指示的基本目的,它還指示了一個或多個使用已認證公鑰的目的。此內容的 ASN.1 定義如下:
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId任何有需要的組織都可定義 KeyPurpose。依照 IANA 或 ITU-T Rec X.660 | ISO/IEC/ITU 9834-1 的規定分派用於標識 KeyPurpose 的物件標識符KeyPurposeId ::= OBJECT IDENTIFIER
Java 2 Platform Standard Edition 的 1.4 版本中添加了此方法。為了維持與現有服務提供者的後向相容性,沒有 abstract
此方法,並且它提供了一個預設實作。子類別應該通過正確的實作覆寫此方法。
CertificateParsingException
- 如果無法對該擴展進行解碼public abstract int getBasicConstraints()
BasicConstraints
擴展 (OID = 2.5.29.19) 中獲取證書的限制路徑長度。
BasicConstraints 擴展標識證書的主體是否為一個證書頒發機構 (CA),以及通過該 CA 的證書路徑的深度。僅在將 cA
設置為 TRUE 時,pathLenConstraint
欄位(參見以下內容)才有意義。在這種情況下,它給出證書路徑中此證書後面的最大 CA 證書數。值為零指示路徑中只有一個終端實體證書。
注意,對於 RFC 2459,如果 cA
為 TRUE(意味著此證書屬於證書頒發機構),則始終將此擴展標記為關鍵的。
此內容的 ASN.1 定義如下:
BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL }
pathLenConstraint
的值;否則返回 -1。如果該證書的主體是 CA 並且未出現 pathLenConstraint
,則返回 Integer.MAX_VALUE
,指示對於該證書路徑的長度沒有限制。public Collection<List<?>> getSubjectAlternativeNames() throws CertificateParsingException
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
,該 List 的第一項是一個 Integer
(0-8,表示名稱型別),第二項是一個 String
或 byte 陣列(分別為 string 或 ASN.1 DER 編碼形式,表示名稱)。
RFC 822、DNS 和 URI 名稱是使用這些型別已定義的 string 格式(受 RFC 2459 中所包括的限制的影響)以 String
的形式返回的。使用四點表示法(dotted quad notation)返回 IPv4 位址名。以 "a1:a2:...:a8" 的形式返回 IPv6 位址名,其中 a1-a8 是十六進制值,表示該位址的 8 個 16 位部分。以 String
形式返回 OID 名稱,該字元串用一系列句點分隔的非負整數來表示。以 RFC 2253 string 格式返回目錄名(標識名)。沒有為 otherNames、X.400 名、EDI 方名或其他全部類別型的名稱定義標準的 string 格式。它們是以 byte 陣列的形式返回的,其中包含 ASN.1 DER 編碼形式的名稱。
注意,返回的 Collection
可能包含多個相同型別的名稱。另外還要注意,返回的 Collection
是不可變的,並且將複製 byte 陣列中所包含的所有項,以防止後續的修改。
Java 2 Platform Standard Edition 的 1.4 版本中添加了此方法。為了維持與現有服務提供者的後向相容性,沒有 abstract
此方法,並且它提供了一個預設實作。子類別應該通過正確的實作覆寫此方法。
Collection
(或者為 null
)
CertificateParsingException
- 如果無法對該擴展進行解碼public Collection<List<?>> getIssuerAlternativeNames() throws CertificateParsingException
IssuerAltName
擴展 (OID = 2.5.29.18) 中獲取一個發佈方替換名稱的不可變集合。
IssuerAltName
擴展的 ASN.1 定義如下:
IssuerAltName ::= GeneralNames在
getSubjectAlternativeNames
中定義了 GeneralNames
的 ASN.1 定義。
如果此證書不包含 IssuerAltName
擴展,則返回 null
。否則返回一個 Collection
,其中的項表示該擴展中所包括的每個 GeneralName
。每一項都是一個 List
,該 List 的第一項是一個 Integer
(0-8,表示名稱型別),第二項是一個 String
或 byte 陣列(分別為 string 或 ASN.1 DER 編碼形式,表示名稱)。有關每種名稱型別所用格式的更多細節,請參見 getSubjectAlternativeNames
方法。
注意,返回的 Collection
可能包含多個相同型別的名稱。另外還要注意,返回的 Collection
是不可變的,並且將複製 byte 陣列中所包含的所有項,以防止後續的修改。
Java 2 Platform Standard Edition 的 1.4 版本中添加了此方法。為了維持與現有服務提供者的後向相容性,沒有 abstract
此方法,並且它提供了一個預設實作。子類別應該通過正確的實作覆寫此方法。
Collection
(或者為 null
)
CertificateParsingException
- 如果無法對該擴展進行解碼
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。