AWS マネージド Kafka インスタンス (MSK) を使用して Kafka クライアント アプリ (プロデューサーとコンシューマーの両方) を作成しようとしています。また、ブローカーからブローカーへの通信およびクライアントからブローカーへの通信は、クラスター内の TLS を介して安全に構成されます。CA は AWS プライベート CA であり、クライアントが TLS 経由で認証を仲介するために MSK でサポートされている唯一の CA です。
問題のコンテキスト: AWS の公式ドキュメント ( https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html#msk-authentication-client ) の手順は Java の世界に傾倒しており、クライアントのトラストストアと取引を扱っています。 jksとしてのキーストア。ただし、.Net クライアントは Java JKS コンテナー形式 ( https://github.com/mhowlett/confluent-kafka-dotnet/tree/security/examples/Security )を使用しません。
サーバー認証クライアント:この部分は解決できました。jks は単なるデータ ストアであるため、上記の aws doc に従ってキーストアを作成した後、追加の keytool および openssl コマンドをいくつか実行して、クライアント証明書とキーを明示的に抽出しました。これを使用して、メッセージを正常に生成および消費することができました。
ただし、クライアントがサーバーを検証するには、ssl.ca.location を CA ルート証明書に設定する必要があります。プライベート CA (MSK インスタンスで CA として使用されるもの) からルート CA をダウンロードしました。これはデフォルトで pem 形式です (注: これには証明書の詳細のみが含まれ、キーの詳細は含まれません)。以下のコマンドを使用して .crt に変換しました。
add pem to truststore : keytool -keystore kafka.client.truststore.jks -alias CARoot -importcert -file Certificate.pem
get cert from truststore : keytool -export -alias CARoot -keystore kafka.client.truststore.jks -rfc -file ca-root.crt
上記の ca-root.crt を ca の場所に使用しても機能していないようです。ブローカの検証に失敗したというエラーがスローされます。クライアント マシンは Windows ですが、証明書の場所 ssl.ca.location を渡すこと以外は問題ありません。さらに、マシンに証明書をインストールしようとしましたが、まだ運がありません。以下のエラーが表示されます。
SSL handshake failed: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed: broker certificate could not be verified, verify that ssl.ca.location is correctly configured or root CA certificates are installed
クライアント検証サーバー部分で何か不足していますか?
更新: ブローカーの検証も解決できました。上記の公式の AWS ドキュメントは、ブローカー検証認証のために Java 証明書に依存しています。jks から perm とさらに .crt を派生させるために少し拡張し、生成された .crt を ssl.ca.location の CA として使用したところ、機能しました。ただし、生成される証明書にはあまりにも多くの証明書があり、MSK ブローカー証明書の検証に使用される証明書が明確ではありません。また、プライベート AWS CA からダウンロードした CA 証明書が機能しないのはなぜですか? 誰かがこれらを手伝ってくれると本当に助かります。また、問題に対する代替の標準的な解決策があれば提案してください。