1 Korzystanie z certyfikatów

Przegląd

Zabbix może używać certyfikatów RSA w formacie PEM, podpisanych przez publiczny lub wewnętrzny urząd certyfikacji (CA).

Weryfikacja certyfikatu jest wykonywana względem wstępnie skonfigurowanego certyfikatu CA. Opcjonalnie można używać list unieważnionych certyfikatów (CRL).

Każdy komponent Zabbix może mieć skonfigurowany tylko jeden certyfikat.

Aby uzyskać więcej informacji na temat konfigurowania i obsługi wewnętrznego CA, generowania i podpisywania żądań certyfikatów oraz unieważniania certyfikatów, zapoznaj się z samouczkami, takimi jak OpenSSL PKI Tutorial v2.0.

Dokładnie rozważ i przetestuj rozszerzenia swoich certyfikatów. Więcej szczegółów znajduje się w sekcji Ograniczenia dotyczące używania rozszerzeń certyfikatów X.509 v3.

Parametry konfiguracji certyfikatu

Następujące parametry konfiguracji są obsługiwane podczas konfigurowania certyfikatów na komponentach Zabbix.

Parameter Mandatory Description
TLSCAFile yes Pełna ścieżka do pliku zawierającego certyfikaty urzędu CA najwyższego poziomu do weryfikacji certyfikatu peer.
Jeśli używasz łańcucha certyfikatów z wieloma elementami, uporządkuj certyfikaty tak, aby certyfikaty CA niższego poziomu były na początku, a następnie certyfikaty CA wyższego poziomu.
Certyfikaty z wielu CA mogą być zawarte w jednym pliku.
TLSCRLFile no Pełna ścieżka do pliku zawierającego listy unieważnionych certyfikatów (CRL).
TLSCertFile yes Pełna ścieżka do pliku zawierającego certyfikat.
Jeśli używasz łańcucha certyfikatów z wieloma elementami, uporządkuj certyfikaty tak, aby certyfikat serwera, proxy lub agenta był na początku, następnie certyfikaty CA niższego poziomu, a na końcu certyfikaty CA wyższego poziomu.
TLSKeyFile yes Pełna ścieżka do pliku zawierającego klucz prywatny.
Upewnij się, że ten plik jest czytelny wyłącznie dla użytkownika Zabbix, ustawiając odpowiednie uprawnienia dostępu.
TLSServerCertIssuer no Dozwolony wystawca certyfikatu serwera.
TLSServerCertSubject no Dozwolony podmiot certyfikatu serwera.

Przykłady konfiguracji

Po skonfigurowaniu niezbędnych certyfikatów skonfiguruj komponenty Zabbix do korzystania z szyfrowania opartego na certyfikatach.

Poniżej znajdują się szczegółowe kroki konfiguracji:

Zabbix server

1. Przygotuj plik certyfikatu CA.

Aby zweryfikować certyfikaty peerów, Zabbix server musi mieć dostęp do pliku zawierającego najwyższego poziomu, samopodpisane certyfikaty głównego CA. Na przykład, jeśli potrzebne są certyfikaty z dwóch niezależnych głównych CA, umieść je w pliku /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. Umieść certyfikat/łańcuch certyfikatów Zabbix server w pliku, na przykład w /home/zabbix/zabbix_server.crt. Pierwszy certyfikat to certyfikat Zabbix server, a następnie certyfikat pośredniego CA:

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

Używaj tylko atrybutów wymienionych powyżej zarówno dla certyfikatów klienta, jak i serwera, aby nie wpływać na proces weryfikacji certyfikatu. Na przykład OpenSSL może nie zdołać ustanowić szyfrowanego połączenia, jeśli używane są rozszerzenia X509v3 Subject Alternative Name lub Netscape Cert Type. Więcej informacji znajdziesz w sekcji Ograniczenia dotyczące używania rozszerzeń certyfikatów X.509 v3.

3. Umieść klucz prywatny Zabbix server w pliku, na przykład w /home/zabbix/zabbix_server.key:

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

4. Edytuj parametry konfiguracji TLS w pliku konfiguracyjnym Zabbix server:

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

1. Przygotuj pliki zawierające certyfikaty CA najwyższego poziomu, certyfikat/łańcuch certyfikatów Zabbix proxy oraz klucz prywatny, zgodnie z opisem w sekcji Zabbix server. Następnie odpowiednio edytuj parametry TLSCAFile, TLSCertFile i TLSKeyFile w pliku konfiguracyjnym Zabbix proxy.

2. Edytuj dodatkowe parametry TLS w pliku konfiguracyjnym Zabbix proxy:

  • Dla aktywnego proxy: TLSConnect=cert
  • Dla pasywnego proxy: TLSAccept=cert

Aby zwiększyć bezpieczeństwo proxy, możesz również ustawić parametry TLSServerCertIssuer i TLSServerCertSubject. Więcej informacji znajdziesz w sekcji Ograniczanie dozwolonego wystawcy i podmiotu certyfikatu.

Parametry TLS w końcowym pliku konfiguracyjnym proxy mogą wyglądać następująco:

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. Skonfiguruj szyfrowanie dla tego proxy w frontend Zabbix:

  • Przejdź do: Administracja → Proxy.
  • Wybierz proxy i kliknij kartę Szyfrowanie.

W poniższych przykładach pola Issuer i Subject są wypełnione. Więcej informacji o tym, dlaczego i jak używać tych pól, znajdziesz w sekcji Ograniczanie dozwolonego wystawcy i podmiotu certyfikatu.

Dla aktywnego proxy:

Dla pasywnego proxy:

Zabbix agent

1. Przygotuj pliki z certyfikatami CA najwyższego poziomu, certyfikatem/łańcuchem certyfikatów Zabbix agent oraz kluczem prywatnym, zgodnie z opisem w sekcji Zabbix server. Następnie odpowiednio edytuj parametry TLSCAFile, TLSCertFile i TLSKeyFile w pliku konfiguracyjnym Zabbix agent.

2. Edytuj dodatkowe parametry TLS w pliku konfiguracyjnym Zabbix agent:

  • Dla aktywnego agenta: TLSConnect=cert
  • Dla pasywnego agenta: TLSAccept=cert

Aby zwiększyć bezpieczeństwo agenta, możesz ustawić parametry TLSServerCertIssuer i TLSServerCertSubject. Więcej informacji znajdziesz w sekcji Ograniczanie dozwolonego wystawcy i podmiotu certyfikatu.

Parametry TLS w końcowym pliku konfiguracyjnym agenta mogą wyglądać następująco. Zwróć uwagę, że w przykładzie założono, iż host jest monitorowany przez proxy, dlatego jest ono określone jako Subject certyfikatu:

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. Skonfiguruj szyfrowanie w frontend Zabbix dla hosta monitorowanego przez tego agenta.

  • Przejdź do: Zbieranie danych → hosty.
  • Wybierz host i kliknij kartę Szyfrowanie.

W poniższym przykładzie pola Issuer i Subject są wypełnione. Więcej informacji o tym, dlaczego i jak używać tych pól, znajdziesz w sekcji Ograniczanie dozwolonego wystawcy i podmiotu certyfikatu.

Zabbix web service

1. Przygotuj pliki z certyfikatami CA najwyższego poziomu, certyfikatem/łańcuchem certyfikatów usługi Zabbix web service oraz kluczem prywatnym, zgodnie z opisem w sekcji Zabbix server. Następnie odpowiednio edytuj parametry TLSCAFile, TLSCertFile i TLSKeyFile w pliku konfiguracyjnym Zabbix web service.

2. Edytuj dodatkowy parametr TLS w pliku konfiguracyjnym Zabbix web service: TLSAccept=cert

Parametry TLS w końcowym pliku konfiguracyjnym web service mogą wyglądać następująco:

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

3. Skonfiguruj serwer Zabbix tak, aby łączył się z zabezpieczoną TLS usługą Zabbix web service, edytując parametr WebServiceURL w pliku konfiguracyjnym Zabbix server:

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

Ograniczanie dozwolonego wystawcy i podmiotu certyfikatu

Gdy dwa komponenty Zabbix (na przykład serwer i agent) ustanawiają połączenie TLS, weryfikują wzajemnie swoje certyfikaty. Jeśli certyfikat strony zdalnej jest podpisany przez zaufany urząd certyfikacji (z wcześniej skonfigurowanym certyfikatem głównym w TLSCAFile), jest prawidłowy, nie wygasł i przechodzi inne kontrole, komunikacja między komponentami może być kontynuowana. W tym najprostszym przypadku wystawca i podmiot certyfikatu nie są weryfikowani.

Jednak stwarza to ryzyko: każdy, kto ma ważny certyfikat, może podszyć się pod kogokolwiek innego (na przykład certyfikat hosta może zostać użyty do podszycia się pod serwer). Choć może to być akceptowalne w małych środowiskach, gdzie certyfikaty są podpisywane przez dedykowany wewnętrzny urząd certyfikacji, a ryzyko podszycia się jest niskie, w większych środowiskach lub środowiskach o wyższych wymaganiach bezpieczeństwa może to być niewystarczające.

Jeśli Twój główny urząd certyfikacji wystawia certyfikaty, które nie powinny być akceptowane przez Zabbix, lub jeśli chcesz zmniejszyć ryzyko podszycia się, możesz ograniczyć dozwolone certyfikaty, określając ich wystawcę i podmiot.

Na przykład w pliku konfiguracyjnym Zabbix proxy można określić:

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

Przy tych ustawieniach aktywny proxy nie będzie komunikował się z serwerem Zabbix, którego certyfikat ma innego wystawcę lub podmiot. Podobnie pasywny proxy nie będzie akceptował żądań od takiego serwera.

Zasady dopasowywania ciągów Issuer i Subject

Zasady dopasowywania ciągów Issuer i Subject są następujące:

  • Ciągi Issuer i Subject są sprawdzane niezależnie. Oba są opcjonalne.
  • Niespecyfikowany ciąg oznacza, że akceptowany jest dowolny ciąg.
  • Ciągi są porównywane tak jak są i muszą być zgodne dokładnie.
  • Obsługiwane są znaki UTF-8. Nie są jednak obsługiwane symbole wieloznaczne (*) ani wyrażenia regularne.
  • Zaimplementowano następujące wymagania RFC 4514 - znaki wymagające ucieczki (za pomocą odwrotnego ukośnika '\', U+005C):
    • w dowolnym miejscu ciągu: '"' (U+0022), '+' (U+002B), ',' (U+002C), ';' (U+003B), '<' (U+003C), '>' (U+003E), '\\' (U+005C);
    • na początku ciągu: spacja (' ', U+0020) lub znak numeru ('#', U+0023);
    • na końcu ciągu: spacja (' ', U+0020).
  • Znaki null (U+0000) nie są obsługiwane. Jeśli zostanie napotkany znak null, dopasowanie zakończy się niepowodzeniem.
  • Standardy RFC 4517 i RFC 4518 nie są obsługiwane.

Na przykład, jeśli ciągi organizacji (O) dla Issuer i Subject zawierają końcowe spacje, a ciąg jednostki organizacyjnej (OU) dla Subject zawiera cudzysłowy, znaki te muszą zostać poprzedzone znakiem ucieczki:

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
Kolejność i formatowanie pól

Zabbix stosuje zalecenia z RFC 4514, która określa "odwróconą" kolejność tych pól, zaczynając od pól najniższego poziomu (CN), przechodząc przez pola średniego poziomu (OU, O), a kończąc na polach najwyższego poziomu (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

Natomiast OpenSSL domyślnie wyświetla ciągi Issuer i Subject w kolejności od najwyższego do najniższego poziomu. W poniższym przykładzie pola Issuer i Subject zaczynają się od najwyższego poziomu (DC) i kończą na polu najniższego poziomu (CN). Formatowanie ze spacjami i separatorami pól również różni się w zależności od użytych opcji, dlatego nie będzie zgodne z formatem wymaganym przez 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

Aby poprawnie sformatować ciągi Issuer i Subject dla Zabbix, uruchom OpenSSL z następującymi opcjami:

$ 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

Wynik będzie wtedy w odwróconej kolejności, rozdzielany przecinkami i będzie można go użyć w plikach konfiguracyjnych Zabbix oraz 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

Ograniczenia dotyczące używania rozszerzeń certyfikatów X.509 v3

Podczas wdrażania certyfikatów X.509 v3 w Zabbix niektóre rozszerzenia mogą nie być w pełni obsługiwane lub mogą powodować niespójne działanie.

Rozszerzenie Subject Alternative Name

Zabbix nie obsługuje rozszerzenia Subject Alternative Name, które służy do określania alternatywnych nazw DNS, takich jak adresy IP lub adresy e-mail. Zabbix może weryfikować wyłącznie wartość w polu Subject certyfikatu (zobacz Ograniczanie dozwolonego wystawcy i podmiotu certyfikatu). Jeśli certyfikaty zawierają pole subjectAltName, wynik weryfikacji certyfikatu może się różnić w zależności od konkretnych zestawów narzędzi kryptograficznych użytych do kompilacji komponentów Zabbix. W rezultacie Zabbix może zarówno akceptować, jak i odrzucać certyfikaty w zależności od tych kombinacji.

Rozszerzenie Extended Key Usage

Zabbix obsługuje rozszerzenie Extended Key Usage. Jednak jeśli jest ono używane, zazwyczaj wymagane jest określenie zarówno atrybutu clientAuth (do uwierzytelniania klienta TLS WWW), jak i serverAuth (do uwierzytelniania serwera TLS WWW). Na przykład:

  • W przypadku kontroli pasywnych, gdzie agent działa jako serwer TLS, atrybut serverAuth musi być zawarty w certyfikacie agenta.
  • W przypadku kontroli aktywnych, gdzie agent działa jako klient TLS, atrybut clientAuth musi być zawarty w certyfikacie agenta.

Chociaż GnuTLS może zgłaszać ostrzeżenie o naruszeniu użycia klucza, zwykle pozwala kontynuować komunikację mimo tych ostrzeżeń.

Rozszerzenie Name Constraints

Obsługa rozszerzenia Name Constraints różni się w zależności od zestawu narzędzi kryptograficznych. Upewnij się, że wybrany zestaw narzędzi obsługuje to rozszerzenie. To rozszerzenie może uniemożliwić Zabbix załadowanie certyfikatów CA, jeśli ta sekcja jest oznaczona jako krytyczna, w zależności od używanego zestawu narzędzi.

Listy unieważnionych certyfikatów (CRL)

Jeśli certyfikat zostanie skompromitowany, urząd certyfikacji (CA) może go unieważnić, umieszczając certyfikat na liście unieważnionych certyfikatów (CRL). Listy CRL są zarządzane za pomocą plików konfiguracyjnych i mogą być określone przy użyciu parametru TLSCRLFile w plikach konfiguracyjnych serwera, proxy i agenta. Na przykład:

TLSCRLFile=/home/zabbix/zabbix_crl_file.crt

W tym przypadku zabbix_crl_file.crt może zawierać listy CRL z wielu urzędów certyfikacji i może wyglądać następująco:

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

Plik CRL jest wczytywany tylko podczas uruchamiania Zabbix. Aby zaktualizować listę CRL, uruchom ponownie Zabbix.

Jeśli komponenty Zabbix są skompilowane z OpenSSL i używane są listy CRL, upewnij się, że każdy główny i pośredni urząd certyfikacji w łańcuchach certyfikatów ma odpowiadającą mu listę CRL (nawet jeśli jest pusta) dołączoną w TLSCRLFile.