JavaTM Platform
Standard Ed. 6

java.security.cert
クラス X509Certificate

java.lang.Object
  上位を拡張 java.security.cert.Certificate
      上位を拡張 java.security.cert.X509Certificate
すべての実装されたインタフェース:
Serializable, X509Extension

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 によって署名されています。

詳細は、http://www.ietf.org/rfc/rfc2459.txt にある RFC 2459 の「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 = 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()
          拡張鍵使用法の拡張機能 (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 (バージョン番号) 値を取得します。
 
クラス 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
 

コンストラクタの詳細

X509Certificate

protected X509Certificate()
X.509 証明書のコンストラクタです。

メソッドの詳細

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) }

戻り値:
バージョン番号 (1、2、または 3)

getSerialNumber

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

CertificateSerialNumber ::= INTEGER

戻り値:
シリアル番号

getIssuerDN

public abstract Principal getIssuerDN()
非推奨 getIssuerX500Principal() で置き換えられました。このメソッドは、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 は、通常 PrintableStringTeletexStringUniversalString のどれかです。

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

getIssuerX500Principal

public X500Principal getIssuerX500Principal()
証明書から発行者 (発行者の識別名) の値を X500Principal として返します。

サブクラスでこのメソッドをオーバーライドすることをお勧めします。

戻り値:
発行者の識別名を表す X500Principal
導入されたバージョン:
1.4

getSubjectDN

public abstract Principal getSubjectDN()
非推奨 getSubjectX500Principal() で置き換えられました。このメソッドは、subject を実装固有の Principal オブジェクトとして返します。 移植性のあるコードがこのようなオブジェクトに依存すべきではありません。

証明書から subject (被認証者識別名) 値を取得します。subject の値が空の場合、返される Principal オブジェクトの getName() メソッドは空の文字列 ("") を返します。  

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

 subject    Name
 
 

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

戻り値:
名前が被認証者識別名である Principal

getSubjectX500Principal

public X500Principal getSubjectX500Principal()
証明書から被認証者 (被認証者の識別名) の値を X500Principal として返します。被認証者の値が空の場合、返される X500Principal オブジェクトの getName() メソッドは空の文字列 ("") を返します。

サブクラスでこのメソッドをオーバーライドすることをお勧めします。

戻り値:
被認証者の識別名を表す X500Principal
導入されたバージョン:
1.4

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()

getTBSCertificate

public abstract byte[] getTBSCertificate()
                                  throws CertificateEncodingException
有効期間の終了日 この証明書から DER で符号化された認証情報 tbsCertificate を取得します。この情報は署名を個別に検証するために使用されます。

戻り値:
DER で符号化された認証情報
例外:
CertificateEncodingException - 符号化エラーが発生した場合

getSignature

public abstract byte[] getSignature()
証明書から signature 値 (生のシグニチャービット) を取得します。ASN.1 定義は次のとおりです。  
 signature     BIT STRING  
 

戻り値:
シグニチャー

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 が識別されます (RFC 2459 を参照)。  

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

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

getSigAlgParams

public abstract byte[] getSigAlgParams()
この証明書の署名アルゴリズムから、DER で符号化された署名アルゴリズムパラメータを取得します。ほとんどの場合、署名アルゴリズムパラメータは null で、通常は証明書の公開鍵とともに提供されます。個々のパラメータ値へのアクセスが必要な場合は、AlgorithmParameters を使用し、getSigAlgName によって返される名前を使ってインスタンスを生成します。  

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

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

getIssuerUniqueID

public abstract boolean[] getIssuerUniqueID()
証明書から issuerUniqueID 値を取得します。発行者固有の識別子は、発行者名が繰り返し再使用される可能性に対処するために、証明書に定義されています。RFC 2459 では、名前を再使用しないこと、および準拠する証明書が一意の識別子を使用しないことを推奨しています。そのプロファイルに準拠するアプリケーションは、一意の識別子を解析および比較できることが必要です。  

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

 issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL

UniqueIdentifier ::= BIT STRING

戻り値:
発行者の一意の識別子。証明書に定義されていない場合は null

getSubjectUniqueID

public abstract boolean[] getSubjectUniqueID()
証明書から subjectUniqueID 値を取得します。  

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

 subjectUniqueID  [2]  IMPLICIT UniqueIdentifier OPTIONAL

UniqueIdentifier ::= BIT STRING

戻り値:
被認証者の一意の識別子。証明書に定義されていない場合は null

getKeyUsage

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 2459 では、これを使用する場合はクリティカルな拡張としてマーキングすることを推奨しています。

戻り値:
ブール値配列として表されたこの証明書の KeyUsage 拡張機能。この配列での KeyUsage 値の順序は上記の ASN.1 定義と同じ。配列には上で定義した各 KeyUsage の値が含まれる。証明書の中に符号化された KeyUsage リストが上記のリストより長い場合でも切り詰められることはない。この証明書に KeyUsage 拡張機能がない場合は null を返す

getExtendedKeyUsage

public List<String> getExtendedKeyUsage()
                                 throws CertificateParsingException
拡張鍵使用法の拡張機能 (OID = 2.5.29.37) にある 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 にはできず、デフォルトの実装を提供します。サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。

戻り値:
String で表されるオブジェクト識別子の変更不可能なリストとしての、この証明書の ExtendedKeyUsage 拡張機能。この証明書に ExtendedKeyUsage 拡張機能が含まれない場合は null を返す
例外:
CertificateParsingException - 拡張機能が復号化できなかった場合
導入されたバージョン:
1.4

getBasicConstraints

public abstract int getBasicConstraints()
クリティカルな BasicConstraints 拡張機能 (OID = 2.5.29.19) から証明書の制約のパスの長さを取得します。

基本制約拡張機能は、証明書の被認証者が証明書発行局 (CA) であるかどうか、およびその CA の証明書パスの深さを識別します。pathLenConstraint フィールド (下記を参照) は、cA が TRUE に設定されている場合にだけ有効です。この場合、証明書パスでこの証明書のあとに続く CA 証明書の最大数を示します。値 0 は、エンドエンティティーの証明書だけであることを示します。

RFC 2459 では、cA が TRUE (この証明書は証明書発行局のものである) の場合は、この拡張機能は常にクリティカルとしてマーキングされます。

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

 BasicConstraints ::= SEQUENCE {
     cA                  BOOLEAN DEFAULT FALSE,
     pathLenConstraint   INTEGER (0..MAX) OPTIONAL }
 

戻り値:
証明書に BasicConstraints 拡張機能があり被認証者が CA の場合は pathLenConstraint の値、被認証者が CA で pathLenConstraint が表示されない場合は、証明書パスの長さに制限がないことが示すため Integer.MAX_VALUE が返される

getSubjectAlternativeNames

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 で、この List の最初のエントリは Integer (名前タイプ、0 〜 8)、2 番目のエントリは String かバイト配列 (それぞれが文字列形式または ASN.1 DER 符号化形式の名前) になります。

RFC 822、DNS、URI の各名前は String として返されます。 このとき、RFC 2459 に含まれる制限に従って、それぞれのタイプで明確に定義された文字列形式が用いられます。IPv4 アドレス名はドットで 4 つに区切られた表記法で返されます。IPv6 アドレス名は、「a1:a2:...:a8」という形式で返されます。 a1 〜 a8 は、16 進数表記で、アドレスを 16 ビットずつで 8 つに分割しています。OID名は、ピリオドで区切られた負にならない一連の整数で表される String として返されます。ディレクトリ名 (識別名) は RFC 2253 文字列形式として返されます。otherName、X.400 名、EDI 相手名、そのほかのタイプの名前には、標準の文字列形式はありません。名前の ASN.1 DER 符号化形式を含むバイト配列として返されます。

返される Collection には、同じタイプで 1 つ以上の名前が含まれていることがあります。また、返される Collection は不変であり、バイト配列を含むエントリはどれも以後の変更から保護するために複製されています。

このメソッドは、Java 2 Platform Standard Edition のバージョン 1.4 で追加されました。既存のサービスプロバイダとの下位互換性を維持するために、abstract にはできず、デフォルトの実装を提供します。サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。

戻り値:
被認証者の代替名から成る不変の Collection。または null
例外:
CertificateParsingException - 拡張機能が復号化できなかった場合
導入されたバージョン:
1.4

getIssuerAlternativeNames

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 で、この List の最初のエントリは Integer (名前タイプ、0 〜 8)、2 番目のエントリは String かバイト配列 (それぞれが文字列形式または ASN.1 DER 符号化形式の名前) になります。それぞれの名前型で使われる形式の詳細については、getSubjectAlternativeNames メソッドを参照してください。

返される Collection には、同じタイプで 1 つ以上の名前が含まれていることがあります。また、返される Collection は不変であり、バイト配列を含むエントリはどれも以後の変更から保護するために複製されています。

このメソッドは、Java 2 Platform Standard Edition のバージョン 1.4 で追加されました。既存のサービスプロバイダとの下位互換性を維持するために、abstract にはできず、デフォルトの実装を提供します。サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。

戻り値:
発行者の代替名から成る不変の Collection。または null
例外:
CertificateParsingException - 拡張機能が復号化できなかった場合
導入されたバージョン:
1.4

JavaTM Platform
Standard Ed. 6

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

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。