はい、あなたがすでに質問で言ったように:
RMIClientSocketFactoryはシリアル化可能である必要があり、exportObject
UnicastRemoteObjectのコンストラクターで使用すると、クライアントの反対側にシリアル化されます。
これは、シリアル化できないオブジェクトへの(非一時的な)参照を含めることはできず、その場でソケットを作成するために必要な情報のみを含める必要があることを意味します。
(最近、RMISocketFactoryの例を投稿しました。ここでは、シリアル化できるように注意する必要がありました。)
編集(EJPからのコメントの後):
もちろん、これは、クライアントソケットファクトリを使用する必要がある場合にのみ適用されます。多くの場合、他のexportObject
メソッド(または他のコンストラクター)を使用するだけで、サーバー側でデフォルトのサーバーソケットファクトリを使用し、クライアント側でデフォルトのクライアントソケットファクトリをシリアル化せずに使用できます。
そして、はい、サーバーのトラストストアをクライアントにシリアル化する意味はありません。クライアントが証明書を受け入れるレジストリまたはその他のリモートオブジェクトを信頼する必要がある場合、中間者攻撃のポイントがあります。したがって、 SslRMIClientSocketFactoryは、シリアル化可能ですが、サーバーのSSLコンテキストをシリアル化せず、クライアントVMのSSL設定を使用するだけです。