web-dev-qa-db-ja.com

複数のx509証明書を連結できますか?

100ノードを超える非常に大規模なクラスターを構築しています。さまざまなタイプがありますが、Elasticsearchノードを例として使用します。 TLSを使用してノード間のメッシュ接続を暗号化しています。小さなクラスターではこれはうまくいきましたが、大きなクラスターの証明書を生成するときにこの問題に遭遇しました:

https://support.venafi.com/hc/en-us/articles/215914307-Error-MS-CA-error-0xc80005e2-while-enrolling

https://social.technet.Microsoft.com/wiki/contents/articles/3306.pki-faq-what-is-the-maximum-number-of-names-that-c​​an-be-included- in-the-san-extension.aspx

基本的に、SANリストの最大サイズは、エンコード用に2/nameの4096バイトであり、my SANリストは、エンコードのオーバーヘッドがなくても、すでに4566バイトです。 。

したがって、私の質問は、SANリストを2つの証明書(同じCAによって署名された)に分割した場合、2つの証明書をアプリケーションで使用できる1つのファイルに連結する方法はありますか。単一の証明書ファイルを指定する必要がありますか?cat cert{1,2}.crt > combined.crtと同じくらい簡単ですか?

2
matoro

複数の証明書を1つのエンティティに結合して、検証のためにクライアントに提供する方法はありません。クライアントが一致するものを選択することを期待して、TLSハンドシェイク内でクライアントに複数のリーフ証明書を送信することもできません。

多くの名前を処理する一般的な方法は、代わりに多くの証明書を用意し、SNIを使用して期待される証明書を提供することです。これは、クライアントがTLSハンドシェイクClientHello内のserver_name拡張内に予期されるドメインを送信し、サーバーがこの拡張をチェックして、要求された名前と一致する証明書を提供することを意味します。もちろん、これにはクライアントとサーバーの両方によるサポートが必要です。 HTTPSを使用すると、これはクライアントとサーバーの両方で一般的にサポートされますが、他のTLSベースのプロトコルではこれが異なる場合があります。

6
Steffen Ullrich