2009-03-03 4 views
4

ソケットを開き、アプレットがダウンロードしたローカルホスト(エンドユーザマシン)の をリッスンしているサーバと通信するには、アプレットが必要です。署名されたアプレットは、それらが発生した別のホストに接続できますか?

私はアプレットのセキュリティについて読んだものに

反して、それも署名付きアプレット は、彼らが

私が認定している(それは完璧に動作する同じマシン上で)ダウンロードされた、そこから別のホストにソケットを開くことができないようですとが、私も、Javaポリシーファイルを変更しようとした

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

:-selfcertを使用してアプレットは、jarsignerのを使用して、それに署名し、それが別のホストにソケットを開こうと、まだ、いつでも 、私が取得します署名付きアプレットそうする必要はありません。

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

sigendアプレットとの契約は、彼らは別のホストにconnetたりすることはできませんされて何?

答えて

1

はい、アプレットを読み込み、その証明書を受け入れて信頼することを選択した場合、SocketPermissionを含むAllPermissionが付与されます。署名されたアプレットを作成してから、読み込まれたアプレット以外のホストに接続します。あなたはおそらく、彼らが干渉している、ただそれは、他のpolicy.urlの場所を定義するかどうかを確認するために、あなたのポリシーファイルに

grant { 
    permission java.security.AllPermission; 
}; 
  • ルックを持っているあなたのJavaポリシーファイルを変更し、一時的に試みることができます。
  • javascriptのブラウザ設定を確認してください。
  • アプレットの証明書を受け入れ、サイト証明書リストにインストールされていることを確認してください。
  • あなたが持っているgrant codeBase行が、アプレットのマニフェストのコードベースと同じであることを確認してください。
  • 接続を試みる前に、アプレットが持つ権限のリストを印刷してみることができます。
  • アプレット内からAllPermissionをプログラムで割り当てることができます。
+0

@John、それはアクセス権java.security.AllPermissionを許可しているようです。それはまだ私がそれを働かせることができる唯一の方法です。私はアプレットにそのcodeBaseを印刷させました。非常にイライラしていますが、少なくともあなたのおかげで私はそれが実際にセキュリティに関連していて奇妙な問題ではないことを知っています。 – adilei

+0

@John、私はそれが本当であるので、この答えを受け入れるつもりです。アプレットが別のホストにソケットを開くことは可能です。あなたが私のところにいることに興味があるなら、私はフォローアップの質問を設定するつもりです。乾杯、Adi。 – adilei

+0

「プログラムでAllPermissionを許可する」方法はありますか?セキュリティ管理者が悪意のあるコードの実行を阻止するのは、コードが自分の望むことを実行するための許可を自分自身に与えることができるだけの場合です。それは可能でもありません! @ジョン、もしあなたがこれを読めば、Javaスタンダードが明示的に防止する何かを実装しようとすることによって、他の人々が間違ったトレイルを下るのを防ぐために最後の箇条書きを削除してください。それか、なぜ私が間違っているのか説明してください。ありがとう! –

関連する問題