1 Certificaten gebruiken

Overzicht

Zabbix kan RSA-certificaten in PEM-indeling gebruiken, ondertekend door een openbare of in-house certificaatautoriteit (CA). Certificaatverificatie wordt uitgevoerd tegen een vooraf geconfigureerd CA-certificaat. Optioneel kunnen certificaat intrekkingslijsten (CRL) worden gebruikt. Elk Zabbix-component kan slechts één certificaat geconfigureerd hebben.

Voor meer informatie over het instellen en gebruiken van een interne CA, het genereren van certificaataanvragen en het ondertekenen ervan, en hoe u certificaten kunt intrekken, kunt u talrijke online how-to's vinden, bijvoorbeeld OpenSSL PKI Tutorial v1.1.

Overweeg en test zorgvuldig uw certificaatextensies - zie Beperkingen bij het gebruik van X.509 v3-certificaatextensies.

Certificaat configuratieparameters

Parameter Verplicht Beschrijving
TLSCAFile ja Volledig pad naar een bestand dat de certificaten van de hoogste niveau CA's bevat voor verificatie van peer-certificaten.
In het geval van een certificaatketen met meerdere leden moeten ze geordend zijn: certificaten van lagere niveau CA's eerst, gevolgd door certificaten van hogere niveau CA's.
Certificaten van meerdere CA's kunnen in één bestand worden opgenomen.
TLSCRLFile nee Volledig pad naar een bestand dat Certificate Revocation Lists bevat. Zie opmerkingen in Certificate Revocation Lists (CRL).
TLSCertFile ja Volledig pad naar een bestand dat het certificaat bevat (certificaatketen).
In het geval van een certificaatketen met meerdere leden moeten ze geordend zijn: server, proxy of agent certificaat eerst, gevolgd door certificaten van lagere niveau CA's en vervolgens certificaten van hogere niveau CA's.
TLSKeyFile ja Volledig pad naar een bestand dat de privésleutel bevat. Stel de toegangsrechten voor dit bestand in - het moet alleen leesbaar zijn door de Zabbix-gebruiker.
TLSServerCertIssuer nee Toegestane uitgever van servercertificaten.
TLSServerCertSubject nee Toegestaan onderwerp van servercertificaten.

Configuratie van het certificaat op de Zabbix-server

  1. Om peer-certificaten te verifiëren, moet de Zabbix-server toegang hebben tot een bestand met hun hoogste zelfondertekende root CA-certificaten. Als we bijvoorbeeld certificaten verwachten van twee onafhankelijke root CA's, kunnen we hun certificaten in een bestand zoals /home/zabbix/zabbix_ca_file plaatsen, zoals dit:

    Certificaat: Gegevens: Versie: 3 (0x2) Serienummer: 1 (0x1) Handtekening Algoritme: sha1WithRSAEncryption Uitgever: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA ... Onderwerp: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA Openbare sleutel informatie van het onderwerp: Openbare-sleutelalgoritme: rsaEncryption Openbare sleutel: (2048 bit) ... X509v3-extensies: X509v3-sleutelgebruik: kritiek Certificaat ondertekenen, CRL ondertekenen X509v3-basisbeperkingen: kritiek CA: WAAR ... -----BEGIN CERTIFICATE----- MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB .... 9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO -----END CERTIFICATE----- Certificaat: Gegevens: Versie: 3 (0x2) Serienummer: 1 (0x1) Handtekening Algoritme: sha1WithRSAEncryption Uitgever: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA ... Onderwerp: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA Openbare sleutel informatie van het onderwerp: Openbare-sleutelalgoritme: rsaEncryption Openbare sleutel: (2048 bit) .... X509v3-extensies: X509v3-sleutelgebruik: kritiek Certificaat ondertekenen, CRL ondertekenen X509v3-basisbeperkingen: kritiek CA: WAAR ....
    -----BEGIN CERTIFICATE----- MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB ... vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY= -----END CERTIFICATE-----

  2. Plaats de certificaatketen van de Zabbix-server in een bestand, bijvoorbeeld /home/zabbix/zabbix_server.crt:

    Certificaat: Gegevens: Versie: 3 (0x2) Serienummer: 1 (0x1) Handtekening Algoritme: sha1WithRSAEncryption Uitgever: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA ... Onderwerp: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server Openbare sleutel informatie van het onderwerp: Openbare-sleutelalgoritme: rsaEncryption Openbare sleutel: (2048 bit) ... X509v3-extensies: X509v3-sleutelgebruik: kritiek Digitale handtekening, sleutelversleuteling X509v3-basisbeperkingen: CA: ONWAAR ... -----BEGIN CERTIFICATE----- MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk ... h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ== -----END CERTIFICATE----- Certificaat: Gegevens: Versie: 3 (0x2) Serienummer: 2 (0x2) Handtekening Algoritme: sha1WithRSAEncryption Uitgever: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA ... Onderwerp: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA Openbare sleutel informatie van het onderwerp: Openbare-sleutelalgoritme: rsaEncryption Openbare sleutel: (2048 bit) ... X509v3-extensies: X509v3-sleutelgebruik: kritiek Certificaat ondertekenen, CRL ondertekenen X509v3-basisbeperkingen: kritiek CA: WAAR, pathlen: 0 ... -----BEGIN CERTIFICATE----- MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB ... dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw== -----END CERTIFICATE-----

Hier is het eerste certificaat van de Zabbix-server, gevolgd door het tussenliggende CA-certificaat.

Het gebruik van andere attributen dan de hierboven genoemde wordt afgeraden voor zowel client- als servercertificaten, omdat dit het certificeringsverificatieproces kan beïnvloeden. OpenSSL kan bijvoorbeeld falen om een versleutelde verbinding tot stand te brengen als X509v3 Extended Key Usage of Netscape Cert Type zijn ingesteld. Zie ook: Beperkingen bij het gebruik van X.509 v3-certificaatextensies.

  1. Plaats de privésleutel van de Zabbix-server in een bestand, bijvoorbeeld /home/zabbix/zabbix_server.key:

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

  2. Bewerk TLS-parameters in het configuratiebestand van de Zabbix-server als volgt:

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

Configuratie van op certificaten gebaseerde versleuteling voor Zabbix-proxy

1. Bereid bestanden voor met top-level CA-certificaten, proxycertificaat (keten) en privésleutel zoals beschreven in Configuring certificate on Zabbix server. Bewerk de parameters TLSCAFile, TLSCertFile en TLSKeyFile in de proxyconfiguratie dienovereenkomstig.

2. Voor een actieve proxy bewerkt u de parameter TLSConnect:

TLSConnect=cert

Voor een passieve proxy bewerkt u de parameter TLSAccept:

TLSAccept=cert

3. Nu heeft u een minimale op certificaten gebaseerde proxyconfiguratie. U kunt de beveiliging van de proxy verbeteren door de parameters TLSServerCertIssuer en TLSServerCertSubject in te stellen (zie Restricting allowed certificate Issuer and Subject).

4. In het uiteindelijke proxyconfiguratiebestand kunnen de TLS-parameters er als volgt uitzien:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       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

5. Configureer versleuteling voor deze proxy in de Zabbix frontend:

  • Ga naar: Administration → Proxies
  • Selecteer de proxy en ga naar het tabblad Encryption

In de onderstaande voorbeelden worden de Issuer- en Subject-velden ingevuld - zie Restricting allowed certificate Issuer and Subject waarom en hoe u deze velden moet gebruiken.

Voor een actieve proxy

proxy_active_cert.png

Voor een passieve proxy

proxy_passive_cert.png

Configuratie van op certificaten gebaseerde versleuteling voor Zabbix-agent

1. Bereid bestanden voor met top-level CA-certificaten, agentcertificaat (keten) en privésleutel zoals beschreven in Configuring certificate on Zabbix server. Bewerk de parameters TLSCAFile, TLSCertFile en TLSKeyFile in de agentconfiguratie dienovereenkomstig.

2. Voor actieve controles bewerkt u de parameter TLSConnect:

TLSConnect=cert

Voor passieve controles bewerkt u de parameter TLSAccept:

TLSAccept=cert

3. Nu heeft u een minimale op certificaten gebaseerde agentconfiguratie. U kunt de beveiliging van de agent verbeteren door de parameters TLSServerCertIssuer en TLSServerCertSubject in te stellen (zie Restricting allowed certificate Issuer and Subject).

4. In het uiteindelijke agentconfiguratiebestand kunnen de TLS-parameters er als volgt uitzien:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       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

(Het voorbeeld gaat ervan uit dat de host wordt bewaakt via een proxy, vandaar het onderwerp van het proxycertificaat.)

5. Configureer versleuteling voor deze agent in de Zabbix frontend:

  • Ga naar: Configuration → Hosts
  • Selecteer de host en ga naar het tabblad Encryption

In het onderstaande voorbeeld zijn de Issuer- en Subject-velden ingevuld - zie Restricting allowed certificate Issuer and Subject waarom en hoe u deze velden moet gebruiken.

agent_config.png

Beperken van toegestane certificaatuitgever en onderwerp

Wanneer twee Zabbix-componenten (bijvoorbeeld server en agent) een TLS-verbinding tot stand brengen, controleren ze elkaars certificaten. Als een peer-certificaat is ondertekend door een vertrouwde CA (met vooraf geconfigureerd top-level certificaat in TLSCAFile), geldig is, niet is verlopen en enkele andere controles doorstaat, kan de communicatie doorgaan. De certificaatuitgever en het onderwerp worden in dit eenvoudigste geval niet gecontroleerd.

Hier is een risico - iedereen met een geldig certificaat kan zich voordoen als iemand anders (bijvoorbeeld een hostcertificaat kan worden gebruikt om zich voor te doen als server). Dit kan acceptabel zijn in kleine omgevingen waar certificaten worden ondertekend door een speciale interne CA en het risico op zich voordoen laag is.

Als je top-level CA wordt gebruikt voor het uitgeven van andere certificaten die niet door Zabbix moeten worden geaccepteerd of als je het risico van zich voordoen wilt verminderen, dan kun je toegestane certificaten beperken door hun uitgever en onderwerpsreeksen te specificeren.

Bijvoorbeeld, je kunt het volgende toevoegen aan de Zabbix proxy configuratiebestand:

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

Met deze instellingen zal een actieve proxy niet communiceren met een Zabbix-server waarvan het uitgever- of onderwerpsreeks verschilt van het certificaat. Een passieve proxy zal geen verzoeken van een dergelijke server accepteren.

Enkele opmerkingen over het overeenkomen van uitgever- of onderwerpsreeksen:

  1. Uitgever- en onderwerpsreeksen worden onafhankelijk gecontroleerd. Beide zijn optioneel.
  2. UTF-8 tekens zijn toegestaan.
  3. Een niet-gespecificeerde reeks betekent dat elke reeks wordt geaccepteerd.
  4. Rijen worden "as-is" vergeleken, ze moeten exact hetzelfde zijn om overeen te komen.
  5. Wildcards en reguliere expressies worden niet ondersteund bij het matchen.
  6. Alleen enkele vereisten uit RFC 4514 Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names zijn geïmplementeerd:
    1. Ontsnappingstekens '"' (U+0022), '+' U+002B, ',' U+002C, ';' U+003B, '<' U+003C, '>' U+003E, '\' U+005C ergens in de reeks.
    2. Ontsnappingstekens spatie (' ' U+0020) of nummerteken ('#' U+0023) aan het begin van de reeks.
    3. Ontsnappingsteken spatie (' ' U+0020) aan het einde van de reeks.
  7. De match mislukt als een nul-teken (U+0000) wordt aangetroffen (RFC 4514 staat dit toe).
  8. Vereisten van RFC 4517 Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules en RFC 4518 Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation worden niet ondersteund vanwege de hoeveelheid werk die vereist is.

De volgorde van velden in uitgever- en onderwerpsreeksen en opmaak zijn belangrijk! Zabbix volgt de aanbeveling van RFC 4514 en gebruikt de "omgekeerde" volgorde van velden.

De omgekeerde volgorde kan worden geïllustreerd met een voorbeeld:

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

Merk op dat het begint met een laag niveau (CN), doorgaat naar een middenniveau (OU, O) en eindigt met top-level (DC) velden.

OpenSSL toont standaard certificaatuitgever- en onderwerpsvelden in "normale" volgorde, afhankelijk van de gebruikte aanvullende opties:

$ 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

Hier beginnen de uitgever- en onderwerpsreeksen met top-level (DC) en eindigen ze met laag niveau (CN) veld, spaties en veldscheiders zijn afhankelijk van de gebruikte opties. Geen van deze waarden zal overeenkomen in de Issuer- en Subject-velden van Zabbix!

Om de juiste Issuer- en Subject-reeksen te krijgen die bruikbaar zijn in Zabbix, gebruik je OpenSSL met speciale opties (-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname):

$ 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
       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

Nu zijn de reeks van tekenreeksen in omgekeerde volgorde, zijn de velden gescheiden door komma's en kunnen ze worden gebruikt in Zabbix configuratiebestanden en de frontend.

Beperkingen bij het gebruik van X.509 v3-certificaatextensies

  • Subject Alternative Name (subjectAltName)-extensie.
    Alternatieve onderwerpsnamen uit de subjectAltName-extensie (zoals IP-adres, e-mailadres) worden niet ondersteund door Zabbix. Alleen de waarde van het "Onderwerp" -veld kan worden gecontroleerd in Zabbix (zie Beperking van toegestane uitgevende instantie (Issuer) en onderwerp (Subject)).
    Als het certificaat de subjectAltName-extensie gebruikt, hangt het resultaat af van de specifieke combinatie van cryptotoolkits waar Zabbix-componenten mee zijn gecompileerd (het kan wel of niet werken, Zabbix kan weigeren dergelijke certificaten van peers te accepteren).
  • Uitgebreid sleutelgebruik (Extended Key Usage)-extensie.
    Als deze wordt gebruikt, zijn over het algemeen zowel clientAuth (TLS WWW-clientauthenticatie) als serverAuth (TLS WWW-serverauthenticatie) noodzakelijk.
    Bijvoorbeeld, bij passieve controles fungeert de Zabbix-agent als een TLS-server, dus moet serverAuth worden ingesteld in het agentcertificaat. Voor actieve controles moet het agentcertificaat clientAuth hebben ingesteld.
    GnuTLS geeft een waarschuwing bij een schending van het sleutelgebruik, maar staat communicatie toe.
  • Name Constraints-extensie.
    Niet alle cryptotoolkits ondersteunen dit. Deze extensie kan voorkomen dat Zabbix CA-certificaten laadt waarin dit gedeelte als kritiek is gemarkeerd (afhankelijk van de specifieke cryptotoolkit).

Certificaatverroepingslijsten (CRL)

Als een certificaat gecompromitteerd is, kan de CA het intrekken door het op te nemen in de CRL. CRL's kunnen worden geconfigureerd in de configuratiebestanden van de server, proxy en agent met behulp van de parameter TLSCRLFile. Bijvoorbeeld:

TLSCRLFile=/home/zabbix/zabbix_crl_file

waarbij zabbix_crl_file CRL's van meerdere CA's kan bevatten en er als volgt uit kan zien:

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

Het CRL-bestand wordt alleen geladen bij het starten van Zabbix. Het bijwerken van CRL's vereist een herstart.

Als een Zabbix-component is gecompileerd met OpenSSL en CRL's worden gebruikt, moet elke top- en tussenliggende CA in de certificaatketens een overeenkomstige CRL hebben (deze kan leeg zijn) in het TLSCRLFile.