#ssl #nginx #logstash #filebeat #pkcs#8
#ssl #nginx #logstash #файловый удар #pkcs # 8
Вопрос:
В настоящее время я пытаюсь отправить некоторые примеры событий с серверов, принимающих Logstash, в нашей производственной среде в среду тестирования через вывод http.
Сервер на принимающей стороне является пользовательской конечной точкой Nginx HTTPS, которая принимает данные post (конечные точки как для отдельных событий, так и для массовых событий для поддержки формата массового индексирования Elasticsearch) и помещает их в очередь redis, которая в конечном итоге считывается серверами обработки Logstash.
Текущий вывод http на сервере, получающем logstash, выглядит примерно так:
http {
url => "https://json-logs-endpoint.example.com:8443/event"
http_method => "post"
format => "json"
ssl_certificate_validation => false
client_cert => "/etc/filebeat/ssl/filebeat.crt"
client_key => "/etc/filebeat/ssl/filebeat.key"
cacert => "/etc/filebeat/ssl/filebeat.chain"
}
Параметры, связанные с сертификатом, используют те же файлы, что и filebeat log shipper (установленный на всех серверах), через вывод elasticsearch. Разрешения для файлов в /etc/filebeat/ssl/
позволяют logstash считывать сертификаты. Моя конфигурация filebeat повторяет что-то вроде этого:
filebeat:
prospectors: []
registry_file: "/var/lib/filebeat/registry"
config_dir: "/etc/filebeat/conf.d"
output:
elasticsearch:
enabled: true
hosts:
- json-logs-endpoint.example.com:8443
protocol: https
path: "/multi-event"
tls:
certificate_authorities:
- "/etc/filebeat/ssl/filebeat.chain"
certificate: "/etc/filebeat/ssl/filebeat.crt"
certificate_key: "/etc/filebeat/ssl/filebeat.key"
Все экземпляры filebeat на всех серверах успешно отправляют данные по протоколу https на этот сервер Nginx через /multi-event
конечную точку.
Единственное различие между /event
и /multi-event
конечными точками заключается в том, что первая принимает одно событие JSON, а вторая принимает данные в формате запроса на массовую индексацию elasticsearch.
Обе конечные точки защищены с помощью SSL одинаковым образом. При запуске Logstash нет никаких указаний на какую-либо ошибку, связанную с выводом http, хотя после очень короткого периода времени конвейер по существу останавливается. Запуск logstash в подробном режиме затем предоставляет немного больше информации с этой трассировкой стека.
Я предполагаю, что проблема связана с форматом предоставленных сертификатов? Я был бы очень признателен, если бы кто-нибудь мог указать на мою проблему.
Спасибо!
Ответ №1:
Похоже, проблема была связана с тем, что файл ключа клиента, указанный в выводе http:
client_key => "/etc/filebeat/ssl/filebeat.key"
должен был быть в формате PKCS8. Однажды я выполнил следующую команду, чтобы преобразовать ее в правильный формат:
openssl pkcs8 -topk8 -nocrypt -in '/etc/filebeat/ssl/filebeat.key' -out '/etc/filebeat/ssl/pkcs8-filebeat.key'
а затем обновил параметр client_key, чтобы указать на ключ в формате PKCS8:
client_key => "/etc/filebeat/ssl/pkcs8-filebeat.key"
Это решило проблему, и запросы POST HTTPS не работают должным образом. Надеюсь, это окажется полезным для кого-то еще в будущем.