Mutual TLS on multi-worker /aggregated_metrics still uses VERIFY_NONE

Aperta
#269 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
ruby
Ambito
backend, security

Direzione di ricerca

Read do_request in lib/fluent/plugin/in_prometheus.rb and the async-http path in lib/fluent/plugin/in_prometheus/async_wrapper.rb. Trace how the TLS transport's CA settings are made available to the loopback worker fetches, then run or add coverage for multi-worker /aggregated_metrics on both paths. Done when both verify worker certificates against the transport CA and reject an invalid certificate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement
Describe the bug

When in_prometheus uses TLS and workers > 1, /aggregated_metrics fetches each worker on loopback with OpenSSL::SSL::VERIFY_NONE. External /metrics can require a client certificate ( and client_cert_auth). The worker-aggregation fetch does not verify the worker certificate, so that path is not mutual TLS.

The setting is in do_request in lib/fluent/plugin/in_prometheus.rb:

if secure
http.use_ssl = true

target is our child process. so it's secure.

http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
The async-http path in lib/fluent/plugin/in_prometheus/async_wrapper.rb has the same gap.

To Reproduce

Start Fluentd with workers 2 and the configuration below.
Request https://127.0.0.1:24231/aggregated_metrics with a valid client certificate.
The parent worker scrapes the other worker with verify_mode = OpenSSL::SSL::VERIFY_NONE.
A worker certificate that would fail VERIFY_PEER is still accepted on that internal fetch.

Expected behavior

The loopback fetch should use VERIFY_PEER and the same CA as the TLS transport, on both the Net::HTTP path and the async-http path. A bad worker certificate should be rejected.

Your Environment
Rocky8

- Fluentd version: 1.16.9
- TD Agent/Fluent Package version: fluent-package 5.0.7 (fluent-package-5.0.7-1.el8.x86_64)
- fluent-plugin-prometheus version: 2.1.0
- prometheus-client version: 2.1.0
- Operating system: Rocky Linux 8.10 (Green Obsidian)
- Kernel version: 5.15.167.4-microsoft-standard-WSL2
Your Configuration
workers 2 @type prometheus bind 0.0.0.0 port 24231 metrics_path /metrics cert_path /path/to/server.crt private_key_path /path/to/server.key ca_path /path/to/ca.pem client_cert_auth true
Your Error Log
No error is logged. The loopback scrape succeeds because verification is disabled. That is the bug: a certificate that VERIFY_PEER would reject is accepted
Additional context

No response

Lingua principale
Ruby
Stelle
256
Fork
83
Merge medio
1g 2h
PR unite (30g)
3

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di fluent/fluent-plugin-prometheus

Tutte le issue di fluent/fluent-plugin-prometheus

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.