公開鍵インフラストラクチャ (PKI) 拡張機能
Java 2 SDK, v5.0, Beta2


重要: 本書で説明する API および機能は、変更される場合があります。

1. はじめに

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

Java 2 プラットフォームのバージョン 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.enabled (default=false) 動作
true true OCSP を使用した取り消しチェック、
CRL を使用したフェイルオーバー
true false CRL を使用した取り消しチェックのみ
false true 取り消しチェックなし
false false 取り消しチェックなし

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

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

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

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

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

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

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

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

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

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

java.security.cert.PolicyQualifierInfo の非 final 化

5.0 より前では、java.security.cert.PolicyQualifierInfo は final クラスでした。このため、サブクラスを作成したり、異なる型のポリシー修飾子を持つフィールドを返すメソッドを追加したりすることはできませんでした。 5.0 では、このクラスは 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 は、ハードウェア暗号化アクセラレータやスマートカードなどの暗号化トークンに対するネイティブプログラミングインタフェースを定義しています。5.0 では、J2SE に PKCS#11 のサポートが追加されています。これにより、PKI アプリケーションは PKCS#11 トークン (スマートカードなど) をキーストアとして使用できるようになりました。PKCS#11 トークンをキーストアとして使用する方法については、「PKCS#11 リファレンスガイド」を参照してください。

PKCS#12 実装の拡張

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

TrustManager サポートの拡張

デフォルトでは、5.0 の SunJSSE プロバイダは X509 PKIX 準拠のトラストマネージャを使用します。詳細は、「JSSE 5.0 の拡張機能」 を参照してください。