#docker #fluentd #fluent-bit
#docker #fluentd #fluent-bit
Вопрос:
Я пытаюсь подключить клиент fluent-bit (работающий в контейнере Docker) к серверу, на котором работает Fluentd с TLS.
Конфигурация клиента Fluent-bit:
[SERVICE]
Flush 2
Daemon Off
Log_level debug
[INPUT]
Name Dummy
[OUTPUT]
Name forward
Host SERVER_IP
Port PORT
tls on
tls.ca_file /tls/certs/ca.crt.pem
tls.crt_file /tls/certs/client.crt.pem
tls.key_file /tls/private/client.key.pem
tls.key_passwd PASSWORD
tls.debug 3
Конфигурация сервера Fluentd:
<source>
@type forward
@id input_forward
port PORT
# tls
<transport tls>
version TLSv1_2
ca_path /etc/td-agent/tls/certs/ca.crt.pem
cert_path /etc/td-agent/tls/certs/server.crt.pem
private_key_path /etc/td-agent/tls/private/server.key.pem
private_key_passphrase PASSWORD
ca_private_key_passphrase PASSWORD
</transport>
</source>
Когда я запускаю службы на обоих концах и пытаюсь отправить сообщение, эта ошибка отображается в журналах Fluentd (server):
2020-11-06 11:30:45 -0500 [warn]: #0 [input_forward] unexpected error before accepting TLS connection by OpenSSL error_class=OpenSSL::SSL::SSLError error="SSL_accept returned=1 errno=0 state=error: sslv3 alert bad certificate"
Однако, когда я вручную пытаюсь подключить клиент к серверу Fluentd с помощью инструмента командной строки openssl, соединение работает:
openssl s_client -connect IPADDR:PORT -CAfile certs/ca.crt.pem -cert certs/client.crt.pem -key private/client.key.pem -tls1_2 -state -quiet
Поэтому я предполагаю, что сервер выполняет некоторую проверку, которую выполняет клиент CL openssl, но бит fluent-bit, запущенный в контейнере Docker, нет.
Любые предложения приветствуются.
Ответ №1:
На стороне fluentd мне пришлось добавить ca_private_key_path
<transport tls>
#min_version TLSv1_1
version TLSv1_2
ca_path /etc/td-agent/tls/certs/ca.crt.pem
cert_path /etc/td-agent/tls/certs/server.crt.pem
# ADD CA PRIVATE KEY
ca_private_key_path /etc/td-agent/tls/private/ca.key.pem
private_key_path /etc/td-agent/tls/private/server.key.pem
</transport>
Комментарии:
1. Как это может быть правильно? Сервер не должен иметь закрытый ключ центра сертификации для проверки подлинности клиентских сертификатов, выданных этим центром сертификации, что нарушает всю безопасность центра сертификации.