public abstract class X509Certificate extends Certificate implements X509Extension
X.509 証明書の abstract クラスです。このクラスは、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 証明書のインスタンスを生成する方法を示しています。
InputStream inStream = null; try { inStream = new FileInputStream("fileName-of-cert"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); } finally { if (inStream != null) { inStream.close(); } }
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 (バージョン番号) 値を取得します。 |
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
有効期間は、証明書が有効である最初の日時と最後の日時の 2 つの日時値から成ります。これは 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
を実装固有の Principal オブジェクトとして返します。移植性のあるコードがこのようなオブジェクトに依存すべきではありません。
証明書から 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
を実装固有の 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 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 3280 では、名前を再使用しないこと、および準拠する証明書が一意の識別子を使用しないことを推奨しています。そのプロファイルに準拠するアプリケーションは、一意の識別子を解析および比較できることが必要です。
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 配列を取得します。鍵使用目的の拡張機能は、証明書に設定されている鍵の使用目的 (暗号用、署名用、証明書署名用など) を定義します。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鍵の目的は、ニーズに合わせて組織で定義します。鍵の目的を特定するオブジェクト識別子は、IANA または ITU-T の Rec. X.660、あるいは ISO/IEC/ITU 9834-1 に従って割り当てられなければいけません。KeyPurposeId ::= OBJECT IDENTIFIER
このメソッドは、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
- 拡張機能が復号化できなかった場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.