1 Utilizzo dei certificati

Panoramica

Zabbix può utilizzare certificati RSA in formato PEM, firmati da un'autorità di certificazione (CA) pubblica o interna.

La verifica del certificato viene eseguita rispetto a un certificato CA preconfigurato. Facoltativamente, è possibile utilizzare le Certificate Revocation Lists (CRL).

Ogni componente Zabbix può avere configurato un solo certificato.

Per ulteriori informazioni sulla configurazione e sulla gestione di una CA interna, sulla generazione e firma delle richieste di certificato e sulla revoca dei certificati, fare riferimento a tutorial come OpenSSL PKI Tutorial v2.0.

Valutare attentamente e testare le estensioni dei certificati. Per maggiori dettagli, vedere Limitazioni sull'utilizzo delle estensioni dei certificati X.509 v3.

Parametri di configurazione dei certificati

I seguenti parametri di configurazione sono supportati per impostare i certificati sui componenti Zabbix.

Parametro Obbligatorio Descrizione
TLSCAFile Percorso completo di un file contenente i certificati della/e CA di livello superiore per la verifica del certificato del peer.
Se si utilizza una catena di certificati con più membri, ordinare prima i certificati della/e CA di livello inferiore, seguiti dai certificati della/e CA di livello superiore.
I certificati di più CA possono essere inclusi in un singolo file.
TLSCRLFile no Percorso completo di un file contenente le Liste di revoca dei certificati (CRL).
TLSCertFile Percorso completo di un file contenente il certificato.
Se si utilizza una catena di certificati con più membri, ordinare prima il certificato del server, proxy o agent, seguito dai certificati della/e CA di livello inferiore, e infine dai certificati della/e CA di livello superiore.
TLSKeyFile Percorso completo di un file contenente la chiave privata.
Assicurarsi che questo file sia leggibile solo dallo utente Zabbix impostando diritti di accesso appropriati.
TLSServerCertIssuer no Autorità emittente consentita del certificato del server.
TLSServerCertSubject no Soggetto consentito del certificato del server.

Esempi di configurazione

Dopo aver configurato i certificati necessari, configurare i componenti Zabbix per utilizzare la crittografia basata su certificati.

Di seguito sono riportati i passaggi dettagliati per la configurazione di:

Zabbix server

1. Preparare il file del certificato CA.

Per verificare i certificati dei peer, Zabbix server deve avere accesso al file contenente i certificati CA root autofirmati di livello superiore. Ad esempio, se sono necessari certificati di due CA root indipendenti, inserirli in un file in /home/zabbix/zabbix_ca_file.crt:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
            ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
            ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            ...
-----BEGIN CERTIFICATE-----
MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
....
9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
-----END CERTIFICATE-----
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
            ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
            ....
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            ....       
-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
...
vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
-----END CERTIFICATE-----

2. Inserire il certificato/la catena di certificati di Zabbix server in un file, ad esempio in /home/zabbix/zabbix_server.crt. Il primo certificato è il certificato di Zabbix server, seguito dal certificato della CA intermedia:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
        ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Basic Constraints: 
                CA:FALSE
            ...
-----BEGIN CERTIFICATE-----
MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
...
h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
-----END CERTIFICATE-----
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
        ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
            ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
        ...
-----BEGIN CERTIFICATE-----
MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
...
dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
-----END CERTIFICATE-----

Usare solo gli attributi menzionati sopra sia per i certificati client sia per quelli server per evitare di influire sul processo di verifica del certificato. Ad esempio, OpenSSL potrebbe non riuscire a stabilire una connessione crittografata se vengono usate le estensioni X509v3 Subject Alternative Name o Netscape Cert Type. Per ulteriori informazioni, vedere Limitazioni nell'uso delle estensioni dei certificati X.509 v3.

3. Inserire la chiave privata di Zabbix server in un file, ad esempio in /home/zabbix/zabbix_server.key:

-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
...
IJLkhbybBYEf47MLhffWa7XvZTY=
-----END PRIVATE KEY-----

4. Modificare i parametri di configurazione TLS nel file di configurazione di Zabbix server:

TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
Zabbix proxy

1. Prepara i file con i certificati CA di livello superiore, il certificato/la catena di certificati di Zabbix proxy e la chiave privata come descritto nella sezione Zabbix server. Quindi, modifica di conseguenza i parametri TLSCAFile, TLSCertFile e TLSKeyFile nel file di configurazione di Zabbix proxy.

2. Modifica i parametri TLS aggiuntivi nel file di configurazione di Zabbix proxy:

  • Per proxy attivo: TLSConnect=cert
  • Per proxy passivo: TLSAccept=cert

Per migliorare la sicurezza del proxy, puoi anche impostare i parametri TLSServerCertIssuer e TLSServerCertSubject. Per ulteriori informazioni, consulta Restricting allowed certificate issuer and subject.

I parametri TLS nel file di configurazione finale del proxy possono essere simili ai seguenti:

TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_proxy.crt
TLSKeyFile=/home/zabbix/zabbix_proxy.key

3. Configura la crittografia per questo proxy in Zabbix frontend:

  • Vai a: Administration → Proxies.
  • Seleziona il proxy e fai clic sulla scheda Encryption.

Negli esempi seguenti, i campi Issuer e Subject sono compilati. Per ulteriori informazioni sul motivo e sul modo di usare questi campi, consulta Restricting allowed certificate issuer and subject.

Per proxy attivo:

Per proxy passivo:

Zabbix agent

1. Prepara i file con i certificati CA di livello superiore, il certificato/la catena di certificati di Zabbix agent e la chiave privata come descritto nella sezione Zabbix server. Quindi, modifica di conseguenza i parametri TLSCAFile, TLSCertFile e TLSKeyFile nel file di configurazione di Zabbix agent.

2. Modifica i parametri TLS aggiuntivi nel file di configurazione di Zabbix agent:

  • Per agent attivo: TLSConnect=cert
  • Per agent passivo: TLSAccept=cert

Per migliorare la sicurezza di agent, puoi impostare i parametri TLSServerCertIssuer e TLSServerCertSubject. Per ulteriori informazioni, consulta Restricting allowed certificate issuer and subject.

I parametri TLS nel file di configurazione finale di agent possono essere simili ai seguenti. Nota che l'esempio presuppone che l'host sia monitorato da un proxy, quindi questo è specificato come Subject del certificato:

TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_agentd.crt
TLSKeyFile=/home/zabbix/zabbix_agentd.key

3. Configura la crittografia in Zabbix frontend per l'host monitorato da questo agent.

  • Vai a: Data collection → Hosts.
  • Seleziona l'host e fai clic sulla scheda Encryption.

Nell'esempio seguente, i campi Issuer e Subject sono compilati. Per ulteriori informazioni sul motivo e sul modo di usare questi campi, consulta Restricting allowed certificate issuer and subject.

Zabbix web service

1. Preparare i file con i certificati CA di livello superiore, il certificato/la catena di certificati del Zabbix web service e la chiave privata come descritto nella sezione Zabbix server. Quindi, modificare di conseguenza i parametri TLSCAFile, TLSCertFile e TLSKeyFile nel file di configurazione del Zabbix web service.

2. Modificare un ulteriore parametro TLS nel file di configurazione del Zabbix web service: TLSAccept=cert

I parametri TLS nel file di configurazione finale del web service possono essere simili ai seguenti:

TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key

3. Configurare il server Zabbix per connettersi al Zabbix web service configurato con TLS modificando il parametro WebServiceURL nel file di configurazione del Zabbix server:

WebServiceURL=https://example.com:443/report

Limitazione dell'autorità emittente e del soggetto del certificato consentiti

Quando due componenti Zabbix (ad esempio, server e agent) stabiliscono una connessione TLS, verificano reciprocamente i rispettivi certificati. Se il certificato del peer è firmato da una CA attendibile (con un certificato di livello superiore preconfigurato in TLSCAFile), è valido, non è scaduto e supera gli altri controlli, la comunicazione tra i componenti può procedere. In questo caso più semplice, l'autorità emittente e il soggetto del certificato non vengono verificati.

Tuttavia, questo comporta un rischio: chiunque disponga di un certificato valido può impersonare chiunque altro (ad esempio, un certificato host potrebbe essere usato per impersonare un server). Sebbene ciò possa essere accettabile in ambienti piccoli, in cui i certificati sono firmati da una CA interna dedicata e il rischio di impersonificazione è basso, potrebbe non essere sufficiente in ambienti più grandi o più sensibili dal punto di vista della sicurezza.

Se la CA di livello superiore emette certificati che non dovrebbero essere accettati da Zabbix oppure se si desidera ridurre il rischio di impersonificazione, è possibile limitare i certificati consentiti specificandone l'autorità emittente e il soggetto.

Ad esempio, nel file di configurazione di Zabbix proxy, è possibile specificare:

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Con queste impostazioni, un proxy attivo non comunicherà con un server Zabbix il cui certificato abbia un'autorità emittente o un soggetto diversi. Analogamente, un proxy passivo non accetterà richieste da tale server.

Regole per la corrispondenza delle stringhe Issuer e Subject

Le regole per la corrispondenza delle stringhe Issuer e Subject sono le seguenti:

  • Le stringhe Issuer e Subject vengono controllate in modo indipendente. Entrambe sono facoltative.
  • Una stringa non specificata significa che viene accettata qualsiasi stringa.
  • Le stringhe vengono confrontate così come sono e devono corrispondere esattamente.
  • I caratteri UTF-8 sono supportati. Tuttavia, i caratteri jolly (*) o le espressioni regolari non sono supportati.
  • Sono implementati i seguenti requisiti di RFC 4514 - caratteri che richiedono l'escape (con una barra rovesciata '\', U+005C):
    • in qualsiasi punto della stringa: '"' (U+0022), '+' (U+002B), ',' (U+002C), ';' (U+003B), '<' (U+003C), '>' (U+003E), '\\' (U+005C);
    • all'inizio della stringa: spazio (' ', U+0020) o cancelletto ('#', U+0023);
    • alla fine della stringa: spazio (' ', U+0020).
  • I caratteri nulli (U+0000) non sono supportati. Se viene rilevato un carattere nullo, la corrispondenza non riuscirà.
  • Gli standard RFC 4517 e RFC 4518 non sono supportati.

Ad esempio, se le stringhe dell'organizzazione (O) di Issuer e Subject contengono spazi finali e la stringa dell'unità organizzativa (OU) di Subject contiene virgolette doppie, questi caratteri devono essere preceduti da escape:

TLSServerCertIssuer=CN=Signing CA,OU=Development head,O=\ Example SIA\ ,DC=example,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group \"5\",O=\ Example SIA\ ,DC=example,DC=com
Ordine e formattazione dei campi

Zabbix segue le raccomandazioni di RFC 4514, che specifica un ordine "inverso" per questi campi, iniziando dai campi di livello più basso (CN), passando ai campi di livello intermedio (OU, O) e concludendo con i campi di livello più alto (DC).

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Al contrario, OpenSSL per impostazione predefinita visualizza le stringhe Issuer e Subject nell'ordine dal livello più alto a quello più basso. Nell'esempio seguente, i campi Issuer e Subject iniziano dal livello più alto (DC) e terminano con il campo di livello più basso (CN). Anche la formattazione con spazi e separatori di campo varia in base alle opzioni utilizzate e quindi non corrisponderà al formato richiesto da Zabbix.

$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy

$ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
Certificate:
    ...
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
        ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy

Per formattare correttamente le stringhe Issuer e Subject per Zabbix, eseguire OpenSSL con le seguenti opzioni:

$ openssl x509 -noout -issuer -subject \
    -nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname\
    -in /home/zabbix/zabbix_proxy.crt

L'output sarà quindi in ordine inverso, separato da virgole e utilizzabile nei file di configurazione di Zabbix e nel frontend:

issuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
subject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Limitazioni nell'utilizzo delle estensioni dei certificati X.509 v3

Quando si implementano certificati X.509 v3 in Zabbix, alcune estensioni potrebbero non essere pienamente supportate oppure potrebbero causare comportamenti incoerenti.

Estensione Subject Alternative Name

Zabbix non supporta l'estensione Subject Alternative Name, utilizzata per specificare nomi DNS alternativi come indirizzi IP o indirizzi email. Zabbix può convalidare solo il valore nel campo Subject del certificato (vedere Restricting Allowed Certificate Issuer and Subject). Se i certificati includono il campo subjectAltName, il risultato della convalida del certificato può variare a seconda degli specifici toolkit crittografici utilizzati per compilare i componenti di Zabbix. Di conseguenza, Zabbix può accettare o rifiutare i certificati in base a queste combinazioni.

Estensione Extended Key Usage

Zabbix supporta l'estensione Extended Key Usage. Tuttavia, se utilizzata, in genere è richiesto che siano specificati entrambi gli attributi clientAuth (per l'autenticazione client TLS WWW) e serverAuth (per l'autenticazione server TLS WWW). Ad esempio:

  • Nei controlli passivi, in cui Zabbix agent opera come server TLS, l'attributo serverAuth deve essere incluso nel certificato dell'agent.
  • Per i controlli attivi, in cui l'agent opera come client TLS, l'attributo clientAuth deve essere incluso nel certificato dell'agent.

Sebbene GnuTLS possa emettere un avviso per violazioni dell'utilizzo della chiave, in genere consente comunque alla comunicazione di procedere nonostante tali avvisi.

Estensione Name Constraints

Il supporto per l'estensione Name Constraints varia tra i toolkit crittografici. Assicurarsi che il toolkit scelto supporti questa estensione. Questa estensione può impedire a Zabbix di caricare i certificati CA se questa sezione è contrassegnata come critica, a seconda dello specifico toolkit in uso.

Liste di revoca dei certificati (CRL)

Se un certificato è compromesso, l'Autorità di certificazione (CA) può revocarlo includendo il certificato in una Lista di revoca dei certificati (CRL). Le CRL sono gestite tramite file di configurazione e possono essere specificate usando il parametro TLSCRLFile nei file di configurazione di server, proxy e agent. Ad esempio:

TLSCRLFile=/home/zabbix/zabbix_crl_file.crt

In questo caso, zabbix_crl_file.crt può contenere CRL di più CA e potrebbe apparire così:

-----BEGIN X509 CRL-----
MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
...
treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
-----END X509 CRL-----
-----BEGIN X509 CRL-----
MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
...
CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
-----END X509 CRL-----

Il file CRL viene caricato solo all'avvio di Zabbix. Per aggiornare la CRL, riavviare Zabbix.

Se i componenti Zabbix sono compilati con OpenSSL e vengono utilizzate le CRL, assicurarsi che ogni CA di primo livello e intermedia nelle catene di certificati abbia una CRL corrispondente (anche se vuota) inclusa nel TLSCRLFile.