0

みんな。私の知る限り、JVMでは一部のクラスが署名されており、同じパッケージの下にないものも許可されていません。しかし、このシナリオはどうでしょうか。「test.jar」のようなjarファイルが1つしかないJavaWebStartアプリを作成します。test.jarで、ネットワークまたはハードディスクからバイトコード(もちろん署名されていない)でクラスをロードするカスタムクラスローダーを記述します。実行時にロードされるバイトコードのクラスの一部は、test.jarに存在する同じパッケージの下にあります。これは機能しますか?もう1つの質問は、JVMが署名されているクラスと署名されていないクラスをどこでどのようにチェックし、署名されたクラスが同じ署名者によって署名されているかです。情報はjarファイルのMANIFEST.MFファイルから取得する必要があると思います。.classファイルの内容は、署名付きと署名なしで違いはありませんよね?ありがとう。JAR署名メカニズムについてはあまり深く知りません。でも私はしたい。だから私を助けてください、どんなフィードバックでも大歓迎です。

4

1 に答える 1

1

証明書検証の実装は、Java ランタイムのjava.lang.Classloaderクラスにあります。カスタム クラスローダだけでオーバーライドすることはできません。このプロセスはテンプレート デザイン パターンとして実装されており、証明書検証プロセスはプライベート メソッドで実装されているためです。デフォルトの動作をオーバーライドするメカニズムとして考えられるのは、カスタム Classloader 内の defineClass メソッドをオーバーライドすることです。個人的な意見では、このオプションには (セキュリティ モデルに影響を与える可能性があるため) リスクが伴うと考えているため、この手順を実行する場合は十分な予防措置を講じることをお勧めします。

ランタイムの Classloader クラスが、パッケージに証明書を使用する際の一貫性の検証を担当するクラスであることは明らかです。実装では、Map を使用して証明書をパッケージごとに 1 つずつ格納します。パッケージの最初に読み込まれたクラスによって、そのパッケージに存在する他のすべてのクラスを使用する必要がある証明書が決定されます。

同じパッケージ内の異なるクラスが異なる署名者を持つことを許可する場合、ランタイムで使用される (および構築される) セキュリティ モデルを理解することをお勧めします。影響は必ずしもカスタム Classloader クラスだけに限定されるとは限らないためです。

于 2011-05-05T03:11:55.380 に答える