0

RMIにカスタムソケットを使用する場合(SSLを使用する場合など)、UnicastRemoteObject.exportObject(4)で、サーバーソケットファクトリだけでなくクライアントソケットファクトリも指定する必要があります。ただし、オブジェクトのエクスポートはサーバー側で行われます。クライアントソケットファクトリが必要なのはなぜですか?

そのオブジェクトへの接続を取得したいクライアントによってシリアル化されて使用されていない限り... 私はそれがありそうもないと思います(それは答えかもしれませんが)。(SSL)ソケットファクトリは、キーストアがローカルであるなど、シリアル化可能なオブジェクトの典型的な例のようには聞こえません。

4

2 に答える 2

1

はい、あなたがすでに質問で言ったように:

RMIClientSocketFactoryはシリアル化可能である必要があり、exportObject UnicastRemoteObjectのコンストラクターで使用すると、クライアントの反対側にシリアル化されます

これは、シリアル化できないオブジェクトへの(非一時的な)参照を含めることはできず、その場でソケットを作成するために必要な情報のみを含める必要があることを意味します。

(最近、RMISocketFactoryの例を投稿しました。ここでは、シリアル化できるように注意する必要がありました。)


編集(EJPからのコメントの後):

もちろん、これは、クライアントソケットファクトリを使用する必要がある場合にのみ適用されます。多くの場合、他のexportObjectメソッド(または他のコンストラクター)を使用するだけで、サーバー側でデフォルトのサーバーソケットファクトリを使用し、クライアント側でデフォルトのクライアントソケットファクトリをシリアル化せずに使用できます。

そして、はい、サーバーのトラストストアをクライアントにシリアル化する意味はありません。クライアントが証明書を受け入れるレジストリまたはその他のリモートオブジェクトを信頼する必要がある場合、中間者攻撃のポイントがあります。したがって、 SslRMIClientSocketFactoryは、シリアル化可能ですが、サーバーのSSLコンテキストをシリアル化せず、クライアントVMのSSL設定を使用するだけです。

于 2011-06-07T22:54:05.057 に答える
-1

UnicastRemoteObject.exportObject(...) では、クライアント ソケット ファクトリとサーバー ソケット ファクトリを指定する必要があります (もちろん、カスタム ソケットを使用している場合)。

その exportObject() のオーバーロードを使用する場合にのみ、その場合でも null を指定できます。ポート番号のみを指定する必要がある別のオーバーロードがあります。

何故ですか?

そうではありません。

オブジェクトのエクスポートはサーバー側で行われます。

正しい。

なぜクライアント ソケット ファクトリが必要なのですか?

そうではありません。

于 2011-06-08T11:23:52.410 に答える