Проблема с TLS между клиентом Fluent-bit и сервером Fluentd

#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. Как это может быть правильно? Сервер не должен иметь закрытый ключ центра сертификации для проверки подлинности клиентских сертификатов, выданных этим центром сертификации, что нарушает всю безопасность центра сертификации.