4

ソケットを開き、アプレットがダウンロードされたローカル ホスト (エンド ユーザー マシン) をリッスンしているサーバーと通信するには、アプレットが必要です。

アプレットのセキュリティについて読んだこととは反対に、署名されたアプレットでさえ、ダウンロード元の別のホストへのソケットを開くことができないようです (同じマシン上で完全に動作します)。

-selfcert を使用してアプレットを認証し、jarsigner を使用して署名しましたが、別のホストへのソケットを開こうとすると、次のようになります。

Java.lang.Exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)

Java ポリシー ファイルを変更してみましたが、署名済みのアプレットでは変更する必要はありません。

grant codeBase "http://applethost:8080/socket" { permission java.security.AllPermission; permission java.lang.RuntimePermission "usePolicy"; };

sigend アプレットとの取引は何ですか? 別のホストに接続できますか?

4

1 に答える 1

1

はい、アプレットをロードするときに、その証明書を受け入れて信頼することを選択すると、SocketPermission を含む AllPermission が付与されます。以前に、ロード元以外のホストに接続する署名付きアプレットを作成しました。Javaポリシーファイルを一時的に変更して、

grant {
  permission java.security.AllPermission;
};
  • ポリシー ファイルを調べて、他の policy.url の場所が定義されているかどうかを確認します。おそらくそれらが干渉している可能性があります。
  • おそらくJavaScriptのブラウザ設定を確認してください。
  • アプレットの証明書を受け入れ、それがサイト証明書のリストにインストールされていることを確認してください。
  • grant codeBase 行が、アプレットのマニフェストのコードベースと同じであることを確認してください。
  • 接続を試みる前に、アプレットが持っている権限のリストを印刷してみることができます。
  • アプレット内からプログラムで AllPermission を許可することができます。
于 2009-03-03T22:32:23.397 に答える