JavaのJSSEは、2つの異なるTrustManagerを提供します。
基本的な使用法の観点から見ると、違いは、結果のTrustManagerがどのように初期化されるかです Java暗号化アーキテクチャJDK 8のOracleプロバイダー向けドキュメント
SunX509:RFC 3280またはその後継のIETF PKIXワーキンググループで定義されたルールに従って証明書チェーンを検証するX509ExtendedTrustManagerインスタンスのファクトリ。このTrustManagerFactoryはKeystoreオブジェクトを使用した初期化をサポートしますが、は現在、クラスjavax.net.ssl.ManagerFactoryParametersを使用した初期化をサポートしていません。
[〜#〜] pkix [〜#〜]:RFC 3280またはその後継のIETF PKIXワーキンググループによって定義されたルールに従って証明書チェーンを検証するX509ExtendedTrustManagerインスタンスのファクトリ。このTrustManagerFactoryは現在、KeyStoreオブジェクトまたはjavax.net.ssl.CertPathTrustManagerParametersを使用した初期化をサポートしています。
注意すべきことは、 JDK 8のJava暗号化アーキテクチャ標準アルゴリズム名のドキュメント は、PKIXのみをTrustManagerFactoryアルゴリズムとしてリストしていることです。 SunX509はベンダー提供の実装であるため、プロバイダーのドキュメントに委ねられていますが、PKIXはすべてのベンダーによって提供されています。たとえば、IBM JREで実行している場合、SunX509はありませんが、IbmX509。続けて、アプリケーションで「SunX509」をハードコーディングすると、NoSuchAlgorithmException
を受け取ります。したがって、移植性のためには、両方ともkeystoneファイルに対して機能するため(現在、SunとIBM JREの両方がデフォルトでPKIXになっている)、プラットフォームのデフォルトアルゴリズムを以下のように使用するのが最善です。
TrustManagerFactory trustManagerFactory=
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
両方のファクトリーはKeyStore
パラメーターで初期化できますが、PKIXを使用すると、初期化パラメーターを使用して構成できる代替が可能になります。興味深い例は、キーストアファイルの代わりにLDAP証明書ストアを使用するためにLDAPCertStoreParameters
を使用することです(例 here )。
オラクルのバグ追跡システムに問題があり、この質問をもう少し明確にしています
https://bugs.openjdk.Java.net/browse/JDK-8169745
問題から:
SunX509トラストマネージャーは、互換性のためだけにSimpleValidator.Javaに実装されており、新機能は追加されません。 PKIXトラストマネージャーは、デフォルトの推奨トラストマネージャーです。
SunX509バリデーター/トラストマネージャーの実装では、既知の重要な拡張機能のみをチェックするために使用していました。サポートされている拡張機能は、Sun/security/validator/EndEntityChecker.Javaにホワイトリストされています。拡張機能が重要であり、ホワイトリストにない場合、証明書はSunX509検証に合格できません。 PKIXバリデーター/トラストマネージャーは、より豊富な拡張機能と機能をサポートしています。
Oracleプロバイダーのドキュメントでは、現在次のように述べられています。
「SunX509:RFC 3280またはその後継のIETF PKIXワーキンググループによって定義されたルールに従って証明書チェーンを検証するX509ExtendedTrustManagerインスタンスのファクトリー。」
これはRFC 3280の必要なすべての拡張(およびおそらく他の要件)をサポートしていないため、誤解を招くものであり、RFC 3280に厳密に準拠しておらず、すべての必要な拡張をサポートしていない場合があります。使用をやめることもできます。また、このドキュメント全体でRFC 3280の参照を5280に更新する必要があります。