0

状況があり、解決策があるかどうかわかりません。

SSLソケットと証明書「A」および「B」を備えたJavaサーバーがあります。また、証明書「A」を持つクライアントと証明書「B」を持つクライアントの 2 種類があります。ただし、サーバー側に読み込まれる証明書は 1 つだけであるため、どちらのクライアントも証明書を持っています。「A」は接続できるか、証明書を持つクライアントのみを接続できます。「B」は接続できます。

任意のクライアントからの接続で、使用される証明書 ( A と B ) を決定し、適切な証明書を使用するように Java サーバーを変更することは可能ですか?

PS: 私のセキュリティに関する無知をお許しください。

ありがとうございました。

4

1 に答える 1

1

Server Name Indication (SNI) 拡張を介して、同じ IP アドレスとポートで 2 つのサーバー証明書を使用できるようにすることができます。これは、クライアントとサーバーでサポートされている必要があります。

Java はJava 7 以降、クライアント側でこれをサポートしています。

残念ながら、これはサーバー側ではまだサポートされていません。これはJava 8 で計画されています

一方、サーバーで SNI サポートが必要な場合は、別のサーバーを使用して SSL/TLS 接続を処理し、プレーン テキスト接続をアプリケーションに転送できる場合があります。通常、これは HTTP(S) 用の Apache Httpd (リバース プロキシを使用) で実行できます。

あるいは、HTTPS-SNI-Proxy プロジェクトは、他のプロトコルに対してより柔軟である可能性があるようです (名前に HTTPS が含まれているにもかかわらず)。試したことはありませんが、その README によると、最初の Client Hello で SNI 拡張を検索し、構成に応じて SSL/TLS 接続全体を (解読せずに) 別のサーバーに転送します。あなたの例では、2 つSSLServerSocketの を個別のポート (実際にリッスンしたいポートではない) に設定し、クライアントが SNI 拡張機能で要求する内容に応じて、このツールからいずれかのポートに接続を転送する必要があります。

于 2013-07-29T19:16:25.363 に答える