JavaTM 2
Platform
Std. Ed. v1.4.0

javax.security.cert
クラス X509Certificate

java.lang.Object
  |
  +--javax.security.cert.Certificate
        |
        +--javax.security.cert.X509Certificate

public abstract class X509Certificate
extends Certificate

X.509 v1 証明書の abstract クラスです。X.509 証明書のバージョン 1 の属性にアクセスする標準的な方法を提供します。X.509 の v2 や v3 に固有の属性は、このインタフェースを通じては利用できません。将来の API 展開では、完全な X.509 v3 属性へのフルアクセスを提供します。

基本的な X.509 形式は、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 によって署名されています。

tbsCertificate の ASN.1 定義は次のとおりです。

 TBSCertificate  ::=  SEQUENCE  {
     version         [0]  EXPLICIT Version DEFAULT v1,
     serialNumber         CertificateSerialNumber,
     signature            AlgorithmIdentifier,
     issuer               Name,
     validity             Validity,
     subject              Name,
     subjectPublicKeyInfo SubjectPublicKeyInfo,
     }
 

X.509 証明書をインスタンス化するコーディング例を示します。

 
 InputStream inStream = new FileInputStream("fileName-of-cert");
 X509Certificate cert = X509Certificate.getInstance(inStream);
 inStream.close();
 
または
 byte[] certData = <certificate read from a file, say>
 X509Certificate cert = X509Certificate.getInstance(certData);
 

どちらの場合も、X.509 証明書をインスタンス化するコードは、実際の実装を特定したりデフォルト実装で初期化したりするのに Java セキュリティプロパティファイルを使用します。

Java セキュリティプロパティファイルは、<JAVA_HOME>/lib/security/java.security というファイルです。<JAVA_HOME> は、JDK がインストールされているディレクトリを指します。セキュリティプロパティファイルでは、X.509 v1 のデフォルト実装が次のように定義されます。

 cert.provider.x509v1=com.sun.security.cert.internal.x509.X509V1CertImpl
 

ほかの実装をインスタンス化するときには、この cert.provider.x509v1 プロパティの値を変更する必要があります。このプロパティファイルが設定されていない場合は、デフォルト実装が使用されます。現在のところ、セキュリティプロパティにアクセスするうえでセキュリティ制限があるおそれがあるため、この値はクラスが初期化されるときに調査、キャッシュされ、セキュリティプロパティにアクセスできない場合はデフォルト実装が代わりに使われます。

注: パッケージ javax.security.cert のクラスは、旧バージョンの Java Secure Sockets Extension (JSSE) との互換性のために存在します。新しく作成するアプリケーションでは、java.security.cert にある標準 J2SE 証明書クラスをこのクラスの代わりに使用してください。

導入されたバージョン:
1.4
関連項目:
Certificate, X509Extension

コンストラクタの概要
X509Certificate()
           
 
メソッドの概要
abstract  void checkValidity()
          証明書が現在有効であるかどうかを判定します。
abstract  void checkValidity(Date date)
          指定された日付が、証明書の有効期間内であるかどうかを判定します。
static X509Certificate getInstance(byte[] certData)
          X509Certificate オブジェクトをインスタンス化し、指定したバイト配列で初期化します。
static X509Certificate getInstance(InputStream inStream)
          X509Certificate オブジェクトをインスタンス化し、入力ストリーム inStream から読み取られたデータで初期化します。
abstract  Principal getIssuerDN()
          証明書から issuer (発行者識別名) 値を取得します。
abstract  Date getNotAfter()
          証明書の有効期間から notAfter の日付を取得します。
abstract  Date getNotBefore()
          証明書の有効期間から notBefore の日付を取得します。
abstract  BigInteger getSerialNumber()
          証明書から serialNumber 値を取得します。
abstract  String getSigAlgName()
          証明書の署名アルゴリズム名を取得します。
abstract  String getSigAlgOID()
          証明書から署名アルゴリズムの OID 文字列を取得します。
abstract  byte[] getSigAlgParams()
          この証明書の署名アルゴリズムから、DER で符号化された署名アルゴリズムパラメータを取得します。
abstract  Principal getSubjectDN()
          証明書から subject (被認証者識別名) 値を取得します。
abstract  int getVersion()
          証明書から version (バージョン番号) 値を取得します。
 
クラス javax.security.cert.Certificate から継承したメソッド
equals, getEncoded, getPublicKey, hashCode, toString, verify, verify
 
クラス java.lang.Object から継承したメソッド
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

X509Certificate

public X509Certificate()
メソッドの詳細

getInstance

public static final X509Certificate getInstance(InputStream inStream)
                                         throws CertificateException
X509Certificate オブジェクトをインスタンス化し、入力ストリーム inStream から読み取られたデータで初期化します。この実装 (X509Certificate は abstract クラス) は、セキュリティプロパティファイルで cert.provider.x509v1 プロパティの値として指定したクラスによって提供されます。

注: 1 つの DER 符号化証明書だけが入力ストリームであることが前提となります。また、すべての X509Certificate サブクラスでは、次のようなフォームのコンストラクタを提供しなければなりません。

 public <subClass>(InputStream inStream) ...
 

パラメータ:
inStream - 証明書を初期化するために読み取られるデータを保持する入力ストリーム
戻り値:
入力ストリームからのデータで初期化された X509Certificate オブジェクト
例外:
CertificateException - クラスの初期化時、または証明書の解析時にエラーが発生した場合

getInstance

public static final X509Certificate getInstance(byte[] certData)
                                         throws CertificateException
X509Certificate オブジェクトをインスタンス化し、指定したバイト配列で初期化します。この実装 (X509Certificate は abstract クラス) は、セキュリティプロパティファイルで cert.provider.x509v1 プロパティの値として指定したクラスによって提供されます。

注: すべての X509Certificate サブクラスでは、次のようなフォームのコンストラクタを提供する必要があります。

 public <subClass>(InputStream inStream) ...
 

パラメータ:
certData - DER 符号化された証明書を含むバイト配列
戻り値:
certData からのデータで初期化された X509Certificate オブジェクト
例外:
CertificateException - クラスの初期化時、または証明書の解析時にエラーが発生した場合

checkValidity

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 - 証明書がまだ有効になっていない場合

checkValidity

public abstract void checkValidity(Date date)
                            throws CertificateExpiredException,
                                   CertificateNotYetValidException
指定された日付が、証明書の有効期間内であるかどうかを判定します。つまり、指定された日時に証明書が有効であるかどうかを調べます。

パラメータ:
date - 指定された日時にこの証明書が有効であるかどうかを調べる Date
例外:
CertificateExpiredException - 指定された date に証明書が期限切れになっている場合
CertificateNotYetValidException - 指定された date に証明書がまだ有効になっていない場合
関連項目:
checkValidity()

getVersion

public abstract int getVersion()
証明書から version (バージョン番号) 値を取得します。ASN.1 定義は次のとおりです。
 version         [0]  EXPLICIT Version DEFAULT v1

Version ::= INTEGER { v1(0), v2(1), v3(2) }

戻り値:
ASN.1 符号化によるバージョン番号 (0、1 または 2)

getSerialNumber

public abstract BigInteger getSerialNumber()
証明書から serialNumber 値を取得します。シリアル番号は、証明書発行局によって各証明書に割り当てられる整数値です。シリアル番号は、指定された CA によって発行された各証明書に対して一意でなければなりません。つまり、発行者名とシリアル番号によって一意の証明書が識別されます。ASN.1 定義は次のとおりです。
 serialNumber     CertificateSerialNumber

CertificateSerialNumber ::= INTEGER

戻り値:
シリアル番号

getIssuerDN

public abstract Principal getIssuerDN()
証明書から 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 は、通常 PrintableStringTeletexStringUniversalString のどれかです。

戻り値:
名前が発行者識別名である Principal

getSubjectDN

public abstract Principal getSubjectDN()
証明書から subject (被認証者識別名) 値を取得します。ASN.1 定義は次のとおりです。
 subject    Name
 

Name およびその他の関連する定義については、 getIssuerDN を参照してください。

戻り値:
名前が被認証者識別名である Principal
関連項目:
getIssuerDN()

getNotBefore

public abstract Date getNotBefore()
証明書の有効期間から notBefore の日付を取得します。該当する ASN.1 定義は次のとおりです。
 validity             Validity

Validity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }

CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }

戻り値:
有効期間の開始日
関連項目:
checkValidity()

getNotAfter

public abstract Date getNotAfter()
証明書の有効期間から notAfter の日付を取得します。該当する ASN.1 定義については、getNotBefore を参照してください。

戻り値:
有効期間の終了日
関連項目:
checkValidity()

getSigAlgName

public abstract String getSigAlgName()
証明書の署名アルゴリズム名を取得します。たとえば、文字列「SHA-1/DSA」などです。ASN.1 定義は次のとおりです。
 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 文字列から判定されます。

戻り値:
署名アルゴリズム名

getSigAlgOID

public abstract String getSigAlgOID()
証明書から署名アルゴリズムの OID 文字列を取得します。OID はピリオドで区切られた正の整数のセットで表されます。たとえば、文字列「1.2.840.10040.4.3」では、DSA 署名アルゴリズムを持つ SHA-1 が識別されます (PKIX パート I を参照)。

関連する ASN.1 定義については、getSigAlgName を参照してください。

戻り値:
署名アルゴリズムの OID 文字列

getSigAlgParams

public abstract byte[] getSigAlgParams()
この証明書の署名アルゴリズムから、DER で符号化された署名アルゴリズムパラメータを取得します。ほとんどの場合、署名アルゴリズムパラメータは null で、通常は証明書の公開鍵とともに提供されます。

関連する ASN.1 定義については、getSigAlgName を参照してください。

戻り値:
DER で符号化された署名アルゴリズムパラメータ。パラメータが存在しない場合は null

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.