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 certyfikatów

Poniższe parametry konfiguracji są obsługiwane przy konfigurowaniu certyfikatów w komponentach Zabbix.

Parametr Wymagany Opis
TLSCAFile tak Pełna ścieżka do pliku zawierającego certyfikaty nadrzędnego urzędu(ów) certyfikacji (CA) do weryfikacji certyfikatu strony komunikacji.
W przypadku używania łańcucha certyfikatów z wieloma elementami należy uporządkować certyfikaty tak, aby najpierw znajdowały się certyfikaty CA niższego poziomu, a następnie certyfikaty CA wyższego poziomu.
Certyfikaty z wielu urzędów certyfikacji mogą być zawarte w jednym pliku.
TLSCRLFile nie Pełna ścieżka do pliku zawierającego listy unieważnionych certyfikatów (CRL).
TLSCertFile tak Pełna ścieżka do pliku zawierającego certyfikat.
W przypadku używania łańcucha certyfikatów z wieloma elementami należy uporządkować certyfikaty tak, aby najpierw znajdował się certyfikat serwera, proxy lub agenta, następnie certyfikaty CA niższego poziomu, a na końcu certyfikaty CA wyższego poziomu.
TLSKeyFile tak Pełna ścieżka do pliku zawierającego klucz prywatny.
Należy upewnić się, że plik ten jest dostępny do odczytu wyłącznie dla użytkownika Zabbix, ustawiając odpowiednie prawa dostępu.
TLSServerCertIssuer nie Dozwolony wystawca certyfikatu serwera.
TLSServerCertSubject nie Dozwolony podmiot certyfikatu serwera.

Przykłady konfiguracji

Po skonfigurowaniu wymaganych certyfikatów skonfiguruj komponenty Zabbix tak, aby używały szyfrowania opartego na certyfikatach.

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

Serwer Zabbix

1. Przygotuj plik certyfikatu CA.

Aby weryfikować certyfikaty partnera, serwer Zabbix musi mieć dostęp do pliku zawierającego certyfikaty głównych, samopodpisanych głównych urzędów certyfikacji CA. Na przykład, jeśli wymagane są certyfikaty z dwóch niezależnych głównych urzędów 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 serwera Zabbix w pliku, na przykład w /home/zabbix/zabbix_server.crt. Pierwszy certyfikat to certyfikat serwera Zabbix, po którym następuje certyfikat pośredniego urzędu 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 wyłącznie 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 ustanowić szyfrowanego połączenia, jeśli używane są rozszerzenia X509v3 Subject Alternative Name lub Netscape Cert Type. Więcej informacji znajduje się w sekcji Ograniczenia dotyczące używania rozszerzeń certyfikatów X.509 v3.

3. Umieść klucz prywatny serwera Zabbix 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 serwera Zabbix:

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

1. Przygotuj pliki z certyfikatami głównego urzędu certyfikacji (CA), certyfikatem/łańcuchem certyfikatów Zabbix proxy oraz kluczem prywatnym, 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 znajduje się 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 Zabbix frontend:

  • 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, znajduje się 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 agent: TLSConnect=cert
  • Dla pasywnego agent: TLSAccept=cert

Aby zwiększyć bezpieczeństwo agent, 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 agent mogą wyglądać następująco. Zwróć uwagę, że przykład zakłada, iż host jest monitorowany przez proxy, dlatego zostało 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 Zabbix frontend dla hosta monitorowanego przez ten agent.

  • Przejdź do: Data collection → Hosts.
  • Wybierz host i kliknij kartę Encryption.

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.

Usługa internetowa Zabbix

1. Przygotuj pliki z certyfikatami głównego urzędu certyfikacji (CA), certyfikatem/łańcuchem certyfikatów usługi internetowej Zabbix oraz kluczem prywatnym, zgodnie z opisem w sekcji serwer Zabbix. Następnie odpowiednio edytuj parametry TLSCAFile, TLSCertFile i TLSKeyFile w pliku konfiguracyjnym usługi internetowej Zabbix.

2. Edytuj dodatkowy parametr TLS w pliku konfiguracyjnym usługi internetowej Zabbix: TLSAccept=cert

Parametry TLS w końcowym pliku konfiguracyjnym usługi internetowej 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 usługą internetową Zabbix skonfigurowaną do używania TLS, edytując parametr WebServiceURL w pliku konfiguracyjnym serwera Zabbix:

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.
  • Nieokreślony ciąg oznacza, że akceptowany jest dowolny ciąg.
  • Ciągi są porównywane tak jak są i muszą być identyczne.
  • Znaki UTF-8 są obsługiwane. Jednak symbole wieloznaczne (*) ani wyrażenia regularne nie są obsługiwane.
  • Zaimplementowano następujące wymagania RFC 4514 — znaki wymagające poprzedzenia znakiem ucieczki (odwrotnym ukośnikiem '\', 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 kratki ('#', 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) w Issuer i Subject zawierają końcowe spacje, a ciąg jednostki organizacyjnej (OU) w Subject zawiera podwójne cudzysłowy, znaki te muszą być 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ść pól i formatowanie

Zabbix stosuje się do zaleceń RFC 4514, które określają „odwrotną” kolejność tych pól, zaczynając od pól najniższego poziomu (CN), przechodząc do pól poziomu pośredniego (OU, O) i 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

Dane wyjściowe będą wtedy w odwrotnej kolejności, rozdzielone przecinkami i gotowe do użycia w plikach konfiguracyjnych Zabbix oraz we 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.