[Java, Security] JEP 124: Enhance the Certificate Revocation-Checking API

原文はこちら。
https://blogs.oracle.com/mullan/entry/jep_124_enhance_the_certificate

失効チェックとは、証明書の失効ステータスを確定するためのメカニズムで、証明書が取り消された場合には無効とみなされ、当該証明書を利用するべきではありません。JDK 7現在、java.security.cert.CertPathValidatorのPKIX実装に含まれる失効チェックの実装では、OCSPとCRLという、2つの主要な失効チェック方式の両方をサポートしています。ただし、振る舞いを設定可能なオプションはほとんどありません。もちろんいつでも失効チェッカーを独自実装できますが、それは大変な作業です。

JEP 124 (Enhance the Certificate Revocation-Checking API) はJDK 8の11個の新しいセキュリティ機能の一つで、 java.security.cert APIを強化し、ベストエフォートチェック、エンドエンティティ証明書チェック、メカニズム固有のオプションやパラメータなどの様々な失効設定をサポートします。これらの詳細を説明し、サンプルをご紹介しましょう。
JEP 124: Enhance the Certificate Revocation-Checking API
http://openjdk.java.net/jeps/124
この機能は新しい PKIXRevocationChecker というクラスが提供します。PKIX CertPathValidator は以下のようにPKIXRevocationChecker インスタンスを返します。
CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
PKIXRevocationChecker prc = (PKIXRevocationChecker)cpv.getRevocationChecker();
返された PKIXRevocationChecker オブジェクトのメソッドを呼び出し、様々な失効オプションを設定することができます。例えば、ベストエフォートオプション(soft-failと呼ばれます)を使うと、ネットワーク接続不可やサーバーの過負荷が原因でステータスが取得できない場合に失効チェックが成功します。これは以下のように設定します。
prc.setOptions(Enum.setOf(Option.SOFT_FAIL)); 
SOFT_FAIL オプションを指定すると、ネットワークの問題が原因で発生した任意の例外を取得できます。この機能は、こうした情報をログに記録したい場合や、警告として扱いたい場合には役に立つかもしれません。 getSoftFailExceptions メソッドを呼び出して、こうした例外を取得することができます。
List<certpathvalidatorexception> exceptions = prc.getSoftFailExceptions();
ONLY_END_ENTITY と呼ばれる別の新しいオプションを使うと、エンドエンティティ証明書の失効ステータスのみをチェックすることができます。このオプションにより、パフォーマンスが改善する可能性がありますが、CA証明書の失効ステータスをチェックしないため、このオプション利用に際しては注意が必要です。複数のオプションを設定するには、単にそれらをまとめて指定します。例えば以下のような感じです。
prc.setOptions(Enum.setOf(Option.SOFT_FAIL, Option.ONLY_END_ENTITY));
デフォルトでは、 PKIXRevocationChecker はまずOCSP、その後CRLをフォールバックとして利用し、証明書の失効ステータスをチェックしようとします。しかし、 PREFER_CRLS option, を使うとその順番を変更することができ、 NO_FALLBACK オプションを使うとフォールバックを全く無効にすることも可能です。例えば、CRLだけを使って失効チェックしたい場合には以下のように設定します。
prc.setOptions(Enum.setOf(Option.PREFER_CRLS, Option.NO_FALLBACK)); 
OCSPレスポンダURI、トラステッドOCSPレスポンダ証明書、OCSPリクエストの拡張といった様々なオプションを指定できる数多くの有用なメソッドもありますが、最も有用な機能の一つが、 setOCSPResponse メソッドを使ってキャッシュされたOCSPレスポンスを指定できることでしょう。OCSPResponseが既に取得済み、例えばOCSPステープリングを利用するプロトコルでは、この機能は非常に有用です。

所望のオプションを全て設定した後に、以下のようにカスタム CertPathCheckers の一つとして PKIXParameters オブジェクトに PKIXRevocationChecker を追加してから、証明書チェーンを検証する必要があります。
PKIXParameters params = new PKIXParameters(keystore);
params.addCertPathChecker(prc);
CertPathValidatorResult result = cpv.validate(path, params);
JDK 8の早期アクセスバイナリは以下のURLからダウンロードできます。
JDK™ 8 Early Access Releases
http://jdk8.java.net/download.html

0 件のコメント:

コメントを投稿