概要

Java Remote Method Invocation (Java RMI)を使用すると、Javaで分散アプリケーションを作成できます。

RMIでは、おそらく異なるホスト上にある、別のJava仮想マシン(JVM)上で実行しているリモートJavaオブジェクトのメソッドを呼び出すことができます。RMIは、オブジェクトの直列化を使用してパラメータを整列化および非整列化します。また、型を切り捨てないため、真のオブジェクト指向の多相性をサポートします。

RMIのセキュリティの推奨事項

RMIアプリケーションのセキュリティを向上させるには、次の推奨事項に従ってください。

  • シリアライズ・フィルタリングを参照し、示されたベスト・プラクティスに従ってアプリケーションを保護します。
  • Secure Coding Guidelines for Java SEに従います。

  • オプションで、クライアントまたはサーバーでRMIを使用するときには、セキュリティ・マネージャを実行できます。

    警告:

    セキュリティ・マネージャおよびそれに関連するAPIは非推奨であり、今後のリリースでは削除されます。セキュリティ・マネージャの代わりとなるものはありません。詳細および代替手段については、JEP 411を参照してください。
  • 妥当なセキュリティ・ポリシーを設定します。たとえば、RMIで通信するホスト間のみにSocketPermissionを付与して、listen、accept、connectおよびresolve動作を許可します。セキュリティ・ポリシーで AllPermissionは付与しません。Java Development Kitでのアクセス権およびデフォルトのPolicyの実装とポリシー・ファイルの構文を参照してください。

  • ローカル・ホストのJVM間の通信にのみRMIが使用されている場合は、通信をローカルに制限します。このためには、適切なソケット・アクセス権をセキュリティ・ポリシー・ファイルに指定します。または、RMIのAPIを直接使用してローカル・ホストのみに接続を制限できます。RMISocketFactoryクラスを参照してください。

  • java.rmi.server.useCodebaseOnlyプロパティの値がTrueであることを確認します。デフォルトでは、java.rmi.server.useCodebaseOnlyプロパティはTrueに設定されています。このプロパティをFalseに設定すると、リモート・コードのローディングが有効になり、システムに対するセキュリティ・リスクのレベルが高まります。

  • Secure Sockets Layer (SSL)/Transport Layer Security (TLS)経由でRMIを実行し、サーバーとクライアントの両方の認証をリクエストします。これは、カスタム・ソケット・ファクトリを使用すれば可能です。アプリケーションで、リモート・オブジェクトをエクスポートし、必要なタイプのソケット(SSLソケットなど)を作成するカスタム・ソケット・ファクトリを使用できます。この手法を使用すると、アプリケーションはデフォルトのソケット通信のかわりに、SSLソケット通信を使用できます。次を参照してください。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。