public abstract class X509Certificate extends Certificate implements X509Extension
X.509証明書の抽象クラスです。このクラスは、X.509証明書のすべての属性にアクセスするための標準的な方法を提供します。
基本的なX.509 v3形式は、1996年6月にISO/IECおよびANSI X9によって策定され、次のようにASN.1で記述されます。
Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING }
これらの証明書は、インターネットのセキュリティ・システムで認証などの機能をサポートするために広く使われています。代表的なアプリケーションには、Privacy Enhanced Mail (PEM)、Transport Layer Security (SSL)、信頼できるソフトウェア配布のためのコード署名、およびSecure Electronic Transactions (SET)などがあります。
これらの証明書は、証明書発行局 (CA)によって管理および保証されています。CAは、データをX.509標準形式にしてから、そのデータにデジタル署名することにより証明書を作成するサービスです。CAは信頼できる第三者として機能し、直接には面識のない主体同士を紹介します。CA証明書は、そのCA自身で、または「ルート」CAなどのほかのCAによって署名されています。
詳細は、RFC 3280「Internet X.509 Public Key Infrastructure Certificate and CRL Profile」を参照してください。
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証明書のインスタンスを生成する方法を示しています。
try (InputStream inStream = new FileInputStream("fileName-of-cert")) { CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); }
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()
拡張鍵使用法の拡張機能(OID = 2.5.29.37)にある
ExtKeyUsageSyntax フィールドのオブジェクト識別子を表す変更不可能なStringのリストを取得します。 |
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 (バージョン番号)値を取得します。 |
void |
verify(PublicKey key, Provider sigProvider)
指定された公開鍵に対応する非公開鍵を使って、この証明書が署名されたことを検証します。
|
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
有効期間は、証明書が有効である最初の日時と最後の日時の2つの日時値から成ります。これはASN.1で次のように定義されます。
validity Validity Validity ::= 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 v1 Version ::= INTEGER { v1(0), v2(1), v3(2) }
public abstract BigInteger getSerialNumber()
serialNumber
値を取得します。シリアル番号は、証明書発行局によって各証明書に割り当てられる整数値です。シリアル番号は、指定されたCAによって発行された各証明書に対して一意である必要があります。つまり、発行者名とシリアル番号によって一意の証明書が識別されます。ASN.1定義は次のとおりです。
serialNumber CertificateSerialNumber CertificateSerialNumber ::= INTEGER
public abstract Principal getIssuerDN()
issuer
を実装固有のPrincipalオブジェクトとして返します。移植性のあるコードがこのようなオブジェクトに依存すべきではありません。
証明書から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
によって決まります。一般的には、directoryString
です。directoryString
は、通常PrintableString
、TeletexString
、UniversalString
のいずれかです。public X500Principal getIssuerX500Principal()
X500Principal
として返します。
サブクラスでこのメソッドをオーバーライドすることをお薦めします。
X500Principal
public abstract Principal getSubjectDN()
subject
を実装固有のPrincipalオブジェクトとして返します。移植性のあるコードがこのようなオブジェクトに依存すべきではありません。
証明書からsubject
(サブジェクト識別名)値を取得します。subject
値が空の場合、返されるPrincipal
オブジェクトのgetName()
メソッドは空の文字列("")を返します。
ASN.1定義は次のとおりです。
subject Name
Name
およびその他の関連する定義については、getIssuerDN
を参照してください。
public X500Principal getSubjectX500Principal()
X500Principal
として返します。サブジェクト値が空の場合、返されるX500Principal
オブジェクトのgetName()
メソッドは空の文字列("")を返します。
サブクラスでこのメソッドをオーバーライドすることをお薦めします。
X500Principal
public abstract Date getNotBefore()
notBefore
の日付を取得します。該当するASN.1定義は次のとおりです。
validity Validity Validity ::= 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 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文字列から判定されます。
public abstract String getSigAlgOID()
該当するASN.1定義については、getSigAlgName
を参照してください。
public abstract byte[] getSigAlgParams()
AlgorithmParameters
を使用し、getSigAlgName
によって返される名前を使ってインスタンスを生成します。
該当するASN.1定義については、getSigAlgName
を参照してください。
public abstract boolean[] getIssuerUniqueID()
issuerUniqueID
値を取得します。発行者固有の識別子は、発行者名が繰返し再使用される可能性に対処するために、証明書に定義されています。RFC 3280では、名前を再使用しないこと、および準拠する証明書が一意の識別子を使用しないことを推奨しています。そのプロファイルに準拠するアプリケーションは、一意の識別子を解析および比較できることが必要です。
ASN.1定義は次のとおりです。
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL UniqueIdentifier ::= BIT STRING
public abstract boolean[] getSubjectUniqueID()
subjectUniqueID
値を取得します。
ASN.1定義は次のとおりです。
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL UniqueIdentifier ::= BIT STRING
public abstract boolean[] getKeyUsage()
KeyUsage
拡張機能(OID = 2.5.29.15)のビットを表すboolean配列を取得します。鍵使用目的の拡張機能は、証明書に設定されている鍵の使用目的(暗号用、署名用、証明書署名用など)を定義します。ASN.1定義は次のとおりです。
KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) }RFC 3280では、これを使用する場合はクリティカルな拡張としてマーキングすることを推奨しています。
public List<String> getExtendedKeyUsage() throws CertificateParsingException
ExtKeyUsageSyntax
フィールドのオブジェクト識別子を表す変更不可能なStringのリストを取得します。これは、鍵使用法の拡張機能フィールドに示されている基本的な目的に加えて、あるいはその基本的な目的の代わりに、公開鍵が使われる目的(複数可)を表します。ASN.1定義は次のとおりです。
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER鍵の目的は、ニーズに合わせて組織で定義します。鍵の目的を特定するオブジェクト識別子は、IANAまたはITU-TのRec.X.660、あるいはISO/IEC/ITU 9834-1に従って割り当てられなければいけません。
このメソッドは、Java 2 Platform Standard Editionのバージョン1.4で追加されました。既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstract
ではなく、デフォルトの実装を提供します。サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。
CertificateParsingException
- 拡張機能が復号化できなかった場合public abstract int getBasicConstraints()
BasicConstraints
拡張機能(OID = 2.5.29.19)から証明書の制約のパスの長さを取得します。
基本制約拡張機能は、証明書のサブジェクトが証明書発行局(CA)であるかどうか、およびそのCAの証明書パスの深さを識別します。pathLenConstraint
フィールド(下記を参照)は、cA
がTRUEに設定されている場合にだけ有効です。この場合、証明書パスでこの証明書のあとに続くCA証明書の最大数を示します。値0は、エンド・エンティティの証明書だけであることを示します。
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
が返されます。そうでない場合は、拡張機能に含まれる各GeneralName
を表すエントリを含むCollection
が返されます。各エントリはList
で、その最初のエントリはInteger
(名前タイプ、0-8)、2番目のエントリはString
かバイト配列(それぞれが文字列形式またはASN.1 DER符号化形式の名前)になります。
RFC 822、DNS、URIの各名前はString
として返されます。このとき、RFC 3280に含まれる制限に従って、それぞれのタイプで明確に定義された文字列フォーマットが用いられます。IPv4アドレス名はドットで4つに区切られた表記法で返されます。IPv6アドレス名は、「a1:a2:...:a8」という形式で返されます。a1 - a8は、16進数表記で、アドレスを16ビットずつで8つに分割しています。OID名は、ピリオドで区切られた負にならない一連の整数で表されるString
として返されます。ディレクトリ名(識別名)はRFC 2253文字列フォーマットで返されます。otherName、X.400名、EDI相手名、そのほかのタイプの名前には、標準の文字列形式はありません。名前のASN.1 DER符号化形式を含むバイト配列として返されます。
返されるCollection
には、同じタイプの名前が複数含まれていることがあります。また、返されるCollection
は不変であり、バイト配列を含むエントリはいずれも以後の変更から保護するために複製されています。
このメソッドは、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
GeneralNames
のASN.1定義は、getSubjectAlternativeNames
にあります。
この証明書にIssuerAltName
拡張機能が含まれない場合は、null
が返されます。そうでない場合は、拡張機能に含まれる各GeneralName
を表すエントリを含むCollection
が返されます。各エントリはList
で、その最初のエントリはInteger
(名前タイプ、0-8)、2番目のエントリはString
かバイト配列(それぞれが文字列形式またはASN.1 DER符号化形式の名前)になります。それぞれの名前型で使われる形式の詳細については、getSubjectAlternativeNames
メソッドを参照してください。
返されるCollection
には、同じタイプの名前が複数含まれていることがあります。また、返されるCollection
は不変であり、バイト配列を含むエントリはいずれも以後の変更から保護するために複製されています。
このメソッドは、Java 2 Platform Standard Editionのバージョン1.4で追加されました。既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstract
ではなく、デフォルトの実装を提供します。サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。
Collection
。またはnull
CertificateParsingException
- 拡張機能が復号化できなかった場合public void verify(PublicKey key, Provider sigProvider) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
abstract
ではなく、デフォルトの実装を提供します。verify
、クラス: Certificate
key
- 検証の実行に使うPublicKey。sigProvider
- 署名プロバイダ。NoSuchAlgorithmException
- サポートされていない署名アルゴリズムの場合InvalidKeyException
- 無効な鍵の場合SignatureException
- 署名エラーの場合CertificateException
- エンコーディング・エラーの場合。UnsupportedOperationException
- メソッドがサポートされていない場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.