0

ここに別のレガシー サポートの問題があります。
各コンポーネントが自己署名証明書を持ち、サーバー/クライアントのトラストストアに追加されるサーバー複数クライアントネットワークがあります。ここでは認証局を使用していません。
ここでの問題は、セキュリティを強化するためにすべての証明書をアップグレードする必要があることです。新しいクライアントには新しい証明書が付属し、サーバーにも新しい証明書が含まれます。
私たちの問題は、古いクライアントをどのように扱うかです。古いクライアントのキーストアをアップグレードすることは、最後の手段です。

うまくいかないこと:

  1. サーバーのトラストストアに新しい証明書と古い証明書の両方を追加する: クライアントもサーバーを認証しており、サーバー証明書はクライアントのトラストストアに存在しません。

  2. 新しいクライアントに新しいポートを使用する: 新しいクライアントに新しいポートを使用し、古いクライアントには古いポートを継続することを検討しましたが、問題は、この問題に直面している複数のアプリケーションがあるため、複数の新しいポートを検索する必要があることです。他の製品では使用されていません。

FWIW: サーバーは Java で、クライアントは C++ である

EJPの回答後の編集
私はおそらくここで非常にばかげた質問をしていますが、確認したかっただけです。バインドされたソケットの SSL コンテキストを編集する方法はまったくありません。正しい?
また、ハンドシェイク時に使用するサーバー証明書を選択できますか? chooseClientAlias()メソッドと方法は知っchooseServerAlias()ていますが、ここでは、クライアントの Hello メッセージが送信されるまで、どの証明書を使用すればよいかわかりません。

4

1 に答える 1

2

別のポートを使用することは別として:

  1. (1)は、サーバーがクライアント証明書に関係している限り機能します。
  2. クライアントのトラストストアをアップグレードする以外に、古いクライアントに新しいサーバー証明書を認識させるという点では何も機能しません。

これが、社内の CA であっても CA を使用すべきであった理由であり、同じ過ちを二度と犯してはならない理由です。クライアントが自己署名サーバー証明書ではなく CA を直接信頼していた場合、CA 証明書の有効期限が切れるまで証明書を何度もアップグレードしても、現在この問題は発生せず、今後も発生しません。 20年かかるはずです。

その間、クライアントのトラストストアを更新する方法を構築してください。

バインドされたソケットの SSL コンテキストを編集する方法はまったくありません。正しい?

ソケットを作成する前に初期化されると、それらをバインドするどころか、を編集する方法はありませんSSLContext。うーん、多分あなたはとをリロードすることができますが、私はそれがうまくいく(またはうまくいかない)と言っているわけではありません。KeyManagerTrustManagerSSLContext

また、ハンドシェイク時に使用するサーバー証明書を選択できますか?

はい、それがKeyManagerインターフェイスの目的です。具体的にはchooseServerAlias().

chooseClientAlias()メソッドと方法は知っchooseServerAlias()ていますが、ここでは、クライアントの Hello メッセージが送信されるまで、どの証明書を使用すればよいかわかりません。

chooseServerAliasClientHelloが受信されるまで呼び出されません。

于 2016-06-10T03:52:24.090 に答える