次の推奨事項に従って、RMIアプリケーションのセキュリティを向上します。
クライアントまたはサーバーでRMIを使用するときには常にセキュリティ・マネージャを実行します。 Javaチュートリアルの「The Security Manager」を参照してください。
妥当なセキュリティ・ポリシーを設定します。 たとえば、RMIで通信するホスト間のみにSocketPermission
を付与して、listen、accept、connectおよびresolve動作を許可します。 セキュリティ・ポリシーでAllPermission
は付与しません。 「JDKでのアクセス権」および「デフォルトのPolicyの実装とポリシー・ファイルの構文」を参照してください。
ローカル・ホストのJVM間の通信にのみRMIが使用されている場合は、通信をローカルのみに制限します。 そのためには、以前に説明したように、適切なソケット・アクセス権をセキュリティ・ポリシー・ファイルに指定します。 または、RMIのAPIを直接使用してローカル・ホストのみに接続を制限できます。 この例は、RMISocketFactory
クラスのドキュメントを参照してください。
java.rmi.server.useCodebaseOnly
プロパティの値がtrue
(デフォルト値)であることを確認します。 このプロパティをfalse
に設定すると、リモート・コードのローディングが可能になり、システムに対するセキュリティ・リスクのレベルが高まります。 「java.rmiプロパティ
」を参照してください。
SSL/TLSでRMIを実行して、サーバーとクライアントの両方で認証を必須にします。 詳細は、次を参照してください。