公開鍵インフラストラクチャー (PKI) 拡張機能
J2SE 5


1. はじめに

このドキュメントでは、J2SE 5.0 の PKI 拡張機能と、その使用方法について説明します。この拡張機能に対するフィードバックは、java-security@sun.com までお送りください。

JavaSE プラットフォームのバージョン 5.0 では、次の PKI 拡張機能が提供されます。

OCSP (On-Line Certificate Service Protocol)

RFC 2560 に定義された OCSP (On-Line Certificate Service Protocol) のクライアント側のサポートが、このリリースで追加されました。OCSP チェックは、次の 5 つの新しいセキュリティープロパティーで制御されます。
プロパティー名 説明
ocsp.enable このプロパティーの値は、true または false になる。true の場合、OCSP チェックは証明書取り消しチェックの実行中に有効になる。false または設定されていない場合、OCSP チェックは無効になる。
ocsp.responderURL このプロパティーの値は、OCSP 応答者の場所を特定する URL である。次に例を示します。
ocsp.responderURL=http://ocsp.example.net:80

デフォルトでは、OCSP 応答者の場所は、検証される証明書から暗黙的に決定される。RFC 3280 に定義されている Authority Information Access 拡張機能が証明書にない場合、またはオーバーライドが必要な場合に、このプロパティーが使用される。

ocsp.responderCertSubjectName このプロパティーの値は、OCSP 応答者の証明書の主体名である。次に例を示します。
ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp"

デフォルトでは、OCSP 応答者の証明書は、検証される証明書の発行者のものである。このプロパティーは、デフォルトが適用されない場合に、OCSP 応答者の証明書を特定する。この値は RFC 2253 で定義された文字列の識別名で、証明書パスの検証中に取得した証明書セットの中から証明書を特定する。サブジェクト名だけでは証明書を一意に特定できない場合は、ocsp.responderCertIssuerNameocsp.responderCertSerialNumber の両方のプロパティーを代わりに使用する必要がある。このプロパティーが設定されている場合は、この 2 つのプロパティーは無視される。

ocsp.responderCertIssuerName このプロパティーの値は、OCSP 応答者の証明書の発行者名である。次に例を示します。
ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp"

デフォルトでは、OCSP 応答者の証明書は、検証される証明書の発行者のものである。このプロパティーは、デフォルトが適用されない場合に、OCSP 応答者の証明書を特定する。この値は RFC 2253 で定義された文字列の識別名で、証明書パスの検証中に取得した証明書セットの中から証明書を特定する。このプロパティーが設定されている場合、ocsp.responderCertSerialNumber プロパティーも設定されている必要がある。ocsp.responderCertSubjectName プロパティーが設定されている場合、このプロパティーは無視される。

ocsp.responderCertSerialNumber このプロパティーの値は、OCSP 応答者の証明書のシリアル番号である。次に例を示す。
ocsp.responderCertSerialNumber=2A:FF:00

デフォルトでは、OCSP 応答者の証明書は、検証される証明書の発行者のものである。このプロパティーは、デフォルトが適用されない場合に、OCSP 応答者の証明書を特定する。この値は 16 進数の文字列 (コロンまたはスペースで区切られている) で、証明書パスの検証中に取得した証明書セットの中から証明書を特定する。このプロパティーが設定されている場合、ocsp.responderCertIssuerName プロパティーも設定されている必要がある。ocsp.responderCertSubjectName プロパティーが設定されている場合、このプロパティーは無視される。

これらのプロパティーは、Java ランタイムの $JAVA_HOME/jre/lib/security/java.security ファイル内で静的に設定されるか、または java.security.Security.setProperty() メソッドを使って動的に設定されます。

デフォルトでは、OCSP チェックは有効ではありません。ocsp.enable プロパティーを「true」に設定すると有効になります。その他のプロパティーは、オプションで使用できます。OCSP チェックは、取り消しチェックも有効になっている場合にのみ有効になります。取り消しチェックは、PKIXParameters.setRevocationEnabled() メソッドを使用して有効にできます。

OCSP チェックは、取り消しチェック中に証明書の取り消しリスト (CRL) と連動して機能します。次は、OCSP と CRL の相互作用のサマリーです。CRL でのフェイルオーバーは、OCSP に問題が発生した場合にかぎり、発生します。OCSP 応答者が、証明書が取り消されたことまたは取り消されていないことを確認した場合は、フェイルオーバーは発生しません。

PKIXParameters RevocationEnabled (default=true) ocsp.enable (default=false) 動作
true true OCSP を使用した取り消しチェック、
CRL を使用したフェイルオーバー
true false CRL を使用した取り消しチェックのみ
false true 取り消しチェックなし
false false 取り消しチェックなし

取り消しチェックおよび証明書の取り消しリストの詳細については、「Java Certification Path API プログラマーズガイド」を参照してください。

間接的証明書の取り消しリスト (CRL) の API サポート

間接的 CRL は、CRL 発行者以外の発行者からの証明書のエントリを持つ証明書の取り消しリストです。J2SE 5 では、CertPath API の間接的 CRL サポートを改善するため、2 つの変更が加えられました。

java.security.cert.X509CRL クラスには getRevokedCertificate(BigInteger) メソッドがあり、証明書のシリアル番号を基に CRL エントリを取得します。ただし、間接的 CRL では、シリアル番号は証明書を一意に特定しません。J2SE 5 では、getRevokedCertificate() のオーバーロード形式が、証明書の CRL エントリを取得するために追加されました。

J2SE 5 より前では、java.security.cert.X509CRLEntry クラスには CRL エントリが記述する証明書の発行者を取得するメソッドがありませんでした。J2SE 5 では、この問題に対処するため、getCertificateIssuer() メソッドが追加されました。

CertPath API での識別名の使用の明確化

CertPath API には、バイト配列と文字列を受け取って識別名を表現するためのコンストラクタとメソッドがあります。ただし、あるクラスでは、識別名を表現するための X500Principal を受け取る同様のオーバーロード形式がありませんでした。識別名の表現には、型定義が適切で効率的なため、X500Principal を使うことをお勧めします。次のメソッドが CertPath API に追加されています。

X509Certificate クラス内の getSubjectDN() メソッドと getIssuerDN() メソッド、および X509CRL クラス内の getIssuerDN() メソッドには、その仕様から形式が指定されていない識別名を返すという問題があります。その結果、異なる実装からは実装に固有のオブジェクトが返され、アプリケーションの相互運用性が低くなり、移植できなくなります。これらのメソッドは、使用しないことが強く推奨されています。その代わり、X500Principal のインスタンスを返すメソッドをアプリケーションで使用する必要があります。

PKIX 互換性テストスイートへの準拠

J2SE 5 での SUN プロバイダの CertPath 実装は、Public Key Interoperability Test Suite (PKITS) に準拠しています。

java.security.cert.PolicyQualifierInfo の非 final 化

J2SE 5 より前では、java.security.cert.PolicyQualifierInfo は final クラスでした。このため、サブクラスを作成したり、異なる型のポリシー修飾子を持つフィールドを返すメソッドを追加したりすることはできませんでした。J2SE 5 では、このクラスは final ではなくなりましたが、次のメソッドは final になり、クラスの不変性は維持されます。
public final String getPolicyQualifierId()
public final byte[] getEncoded()
public final byte[] getPolicyQualifier()

CA 証明書の追加

次の CA (証明書発行局) 証明書が Java インストールの lib/security ディレクトリの cacerts ファイルに追加されました。
  Alias name: equifaxsecureebusinessca1
  Owner: CN=Equifax Secure eBusiness CA-1, O=Equifax Secure Inc., C=US

  Alias name: equifaxsecureca
  Owner: OU=Equifax Secure Certificate Authority, O=Equifax, C=US

  Alias name: geotrustglobalca
  Owner: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
   
  Alias name: equifaxsecureglobalebusinessca1
  Owner: CN=Equifax Secure Global eBusiness CA-1, O=Equifax Secure Inc., C=US
  
  Alias name: equifaxsecureebusinessca2
  Owner: OU=Equifax Secure eBusiness CA-2, O=Equifax Secure, C=US

  Alias name: verisignclass1g3ca
  Owner: CN=VeriSign Class 1 Public Primary Certification Authority - G3, OU="(c)
  1999 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, 
  O="VeriSign, Inc.", C=US
  Issuer: CN=VeriSign Class 1 Public Primary Certification Authority - G3, OU="(c) 
  1999 VeriSign, Inc. 
  - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US

  Alias name: verisignclass2g2ca
  Owner: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized 
  use only", OU=Class 2 
  Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
  Issuer: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized
  use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign,
  Inc.", C=US

  Alias name: verisignclass3g3ca
  Owner: CN=VeriSign Class 3 Public Primary Certification Authority - G3, OU="(c)
  1999 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, 
  O="VeriSign, Inc.", C=US
  Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3, OU="(c) 
  1999 VeriSign, Inc. 
  - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US

  Alias name: verisignclass1g2ca
  Owner: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized 
  use only", OU=Class 1 
  Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
  Issuer: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized
  use only", OU=Class 1 Public Primary Certification Authority - G2, O="VeriSign,
  Inc.", C=US

  Alias name: verisignclass2g3ca
  Owner: CN=VeriSign Class 2 Public Primary Certification Authority - G3, OU="(c)
  1999 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, 
  O="VeriSign, Inc.", C=US
  Issuer: CN=VeriSign Class 2 Public Primary Certification Authority - G3, OU="(c) 
  1999 VeriSign, Inc. 
  - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US

  Alias name: verisignclass3g2ca
  Owner: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized 
  use only", OU=Class 3 
  Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
  Issuer: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized
  use only", OU=Class 3 Public Primary Certification Authority - G2, O="VeriSign,
  Inc.", C=US
    

PKCS#11 のサポート

暗号化トークンインタフェース標準である PKCS#11 は、ハードウェア暗号化アクセラレータやスマートカードなどの暗号化トークンに対するネイティブプログラミングインタフェースを定義しています。J2SE 5 では、PKCS#11 のサポートが追加されています。これにより、PKI アプリケーションは PKCS#11 トークン (スマートカードなど) をキーストアとして使用できるようになりました。PKCS#11 トークンをキーストアとして使用する方法については、「PKCS#11 リファレンスガイド」を参照してください。

PKCS#12 実装の拡張

PKCS#12 (Personal Information Exchange Syntax Standard) では、移植可能な保存形式、およびユーザーの非公開鍵、証明書、その他の秘密およびほかの項目の転送について規定されています。J2SE 1.4.x は、PKCS#12 キーストアを読み取り専用でサポートしており、少数の保護アルゴリズムしか利用できませんでした。J2SE 5 では PKCS#12 キーストアが拡張され、より多くの保護アルゴリズム (一般的なブラウザでサポートされているもの) をサポートし、キーストアの書き込み/更新も可能です。これにより、Java SE、ブラウザ、その他のセキュリティーアプリケーションがインポートおよびエクスポートする PKCS#12 キーストアの相互運用性が向上します。

TrustManager サポートの拡張

デフォルトでは、J2SE 5 の SunJSSE プロバイダは X509 PKIX 準拠のトラストマネージャーを使用します。詳細は、「JSSE リファレンスガイド」で新機能について参照してください。

Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.