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だけを使って失効チェックしたい場合には以下のように設定します。OCSPレスポンダURI、トラステッドOCSPレスポンダ証明書、OCSPリクエストの拡張といった様々なオプションを指定できる数多くの有用なメソッドもありますが、最も有用な機能の一つが、prc.setOptions(Enum.setOf(Option.PREFER_CRLS, Option.NO_FALLBACK));
setOCSPResponse
メソッドを使ってキャッシュされたOCSPレスポンスを指定できることでしょう。OCSPResponseが既に取得済み、例えばOCSPステープリングを利用するプロトコルでは、この機能は非常に有用です。所望のオプションを全て設定した後に、以下のようにカスタム
CertPathCheckers
の一つとして PKIXParameters
オブジェクトに PKIXRevocationChecker
を追加してから、証明書チェーンを検証する必要があります。JDK 8の早期アクセスバイナリは以下のURLからダウンロードできます。PKIXParameters params = new PKIXParameters(keystore); params.addCertPathChecker(prc); CertPathValidatorResult result = cpv.validate(path, params);
JDK™ 8 Early Access Releases
http://jdk8.java.net/download.html
0 件のコメント:
コメントを投稿