7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OS X(Mac)でJavaをアップデートするとアプレットでSocketPermissionエラーが出る時の対処

Posted at

症状

OS X(Mac)環境でJavaをアップデートしたら、あるサイトで以前は正常に実行できていたはずのJavaアプレットが次のようなエラーで実行できなくなりました。

Error: access denied ("Java.net.SocketPermission" "<Hostname>:<Port>" "connect,resolve")

※注:実際のエラーメッセージでは<Host>および<Port>には実際のホスト名とポート番号が入っていました。

別のブラウザを試してみても同じエラーが発生していました。

原因

Java7u51でセキュリティのデフォルト設定が変更されたようです。以前は、ポート番号1024以上のソケット接続は全て許可されていたのが、エフェメラルポートのみを許可するようになりました。エフェメラルポートの範囲はOSごとに異なり、例えばWindows Vista以降では49152から65535、Linuxでは32768から61000などです。この範囲ではないポートに接続する場合、セキュリティポリシーの設定が必要になります。
※参考1 → http://qiita.com/pekokun@github/items/7307fd8c138fe3d2ceb4
※参考2 → http://d.hatena.ne.jp/seraphy/20140214

対処

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/java.policy を編集し、下記の記述を追加します。

grant codeBase "https://<Host>/*" {
        permission java.net.SocketPermission "<Host>:<Port>", "connect";
};

上記記述で、<Host>にはホスト名またはIPアドレス、<Port>にはポート番号あるいはポート番号の範囲(下限-上限)を指定します。(もちろん"https"はサイトに応じて"http"になると思います。)

ちなみに、エラーメッセージではアクションが"connect,resolve"になっていますが、設定側では"resolve"以外のいずれかのアクションを指定すると暗黙的に"resolve"も指定したことになるので、"connect"だけで大丈夫です。
※参考 → https://docs.oracle.com/javase/jp/6/api/java/net/SocketPermission.html

変更を保存したら、ブラウザを再起動します。これでJavaアプレットが実行できるようになります。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?