1. Использование сертификатов

Обзор

Zabbix может использовать RSA сертификаты в формате PEM, подписанные публичным или внутренним центром сертификации (certificate authority, CA).

Проверка сертификата выполняется с использованием заранее подготовленного сертификата CA. Опционально можно использовать списки отозванных сертификатов (Certificate Revocation Lists, CRL).

Каждый компонент Zabbix может иметь только один настроенный сертификат.

Для получения более подробной информации о том, как настроить и управлять внутренним CA, как генерировать и подписывать запросы на сертификаты, как отзывать сертификаты, — обратитесь к руководствам, таким как OpenSSL PKI Tutorial v2.0 [en] .

Тщательно продумывайте и тестируйте ваши расширения сертификатов. Для получения более подробной информации смотри Ограничения при использовании расширений сертификатов X.509 v3.

Параметры конфигурации сертификатов

Следующие параметры конфигурации поддерживаются для настройки сертификатов на компонентах Zabbix.

Parameter Mandatory Description
TLSCAFile yes Полный путь к файлу, содержащему сертификаты корневого CA(ов) для проверки сертификата удаленной стороны.
Если используется цепочка сертификатов из нескольких элементов, располагайте сертификаты CA более низкого уровня первыми, а затем сертификаты CA более высокого уровня.
В одном файле могут быть включены сертификаты от нескольких CA.
TLSCRLFile no Полный путь к файлу, содержащему списки отзыва сертификатов (CRL).
TLSCertFile yes Полный путь к файлу, содержащему сертификат.
Если используется цепочка сертификатов из нескольких элементов, располагайте сертификат сервера, прокси или агента первым, затем сертификаты CA более низкого уровня и завершайте сертификатами CA более высокого уровня.
TLSKeyFile yes Полный путь к файлу, содержащему закрытый ключ.
Убедитесь, что этот файл доступен для чтения только пользователю Zabbix, задав соответствующие права доступа.
TLSServerCertIssuer no Допустимый издатель сертификата сервера.
TLSServerCertSubject no Допустимый субъект сертификата сервера.

Примеры конфигурации

После настройки необходимых сертификатов настройте компоненты Zabbix для использования шифрования на основе сертификатов.

Ниже приведены подробные шаги по настройке:

Сервер Zabbix

1. Подготовьте файл сертификата CA.

Чтобы проверять сертификаты узлов, сервер Zabbix должен иметь доступ к файлу, содержащему корневые сертификаты CA верхнего уровня, подписанные самими собой. Например, если нужны сертификаты от двух независимых корневых CA, поместите их в файл /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. Поместите сертификат/цепочку сертификатов сервера Zabbix в файл, например, /home/zabbix/zabbix_server.crt. Первый сертификат — это сертификат сервера Zabbix, за ним следует сертификат промежуточного 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-----

Используйте только атрибуты, указанные выше, как для клиентского, так и для серверного сертификата, чтобы не повлиять на процесс проверки сертификата. Например, OpenSSL может не установить зашифрованное соединение, если используются расширения X509v3 Subject Alternative Name или Netscape Cert Type. Дополнительные сведения см. в разделе Ограничения на использование расширений сертификатов X.509 v3.

3. Поместите закрытый ключ сервера Zabbix в файл, например, /home/zabbix/zabbix_server.key:

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

4. Отредактируйте параметры конфигурации TLS в файле конфигурации сервера Zabbix:

TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
Прокси Zabbix

1. Подготовьте файлы с корневыми CA-сертификатами, сертификатом/цепочкой сертификатов прокси Zabbix и закрытым ключом, как описано в разделе Сервер Zabbix. Затем соответствующим образом отредактируйте параметры TLSCAFile, TLSCertFile и TLSKeyFile в файле конфигурации прокси Zabbix.

2. Отредактируйте дополнительные параметры TLS в файле конфигурации прокси Zabbix:

  • Для активного прокси: TLSConnect=cert
  • Для пассивного прокси: TLSAccept=cert

Чтобы повысить безопасность прокси, вы также можете задать параметры TLSServerCertIssuer и TLSServerCertSubject. Дополнительные сведения см. в разделе Ограничение разрешенных издателя и субъекта сертификата.

Параметры TLS в итоговом файле конфигурации прокси могут выглядеть следующим образом:

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. Настройте шифрование для этого прокси в веб-интерфейсе Zabbix:

  • Перейдите в: Администрирование → Прокси.
  • Выберите прокси и нажмите вкладку Шифрование.

В приведенных ниже примерах заполнены поля Issuer и Subject. Дополнительные сведения о том, зачем и как использовать эти поля, см. в разделе Ограничение разрешенных издателя и субъекта сертификата.

Для активного прокси:

Для пассивного прокси:

Агент Zabbix

1. Подготовьте файлы с корневыми CA-сертификатами, сертификатом/цепочкой сертификатов агента Zabbix и закрытым ключом, как описано в разделе сервер Zabbix. Затем соответствующим образом отредактируйте параметры TLSCAFile, TLSCertFile и TLSKeyFile в файле конфигурации агента Zabbix.

2. Отредактируйте дополнительные параметры TLS в файле конфигурации агента Zabbix:

  • Для активного агента: TLSConnect=cert
  • Для пассивного агента: TLSAccept=cert

Чтобы повысить безопасность агента, можно задать параметры TLSServerCertIssuer и TLSServerCertSubject. Дополнительные сведения см. в разделе Ограничение допустимых издателя и субъекта сертификата.

Параметры TLS в итоговом файле конфигурации агента могут выглядеть следующим образом. Обратите внимание, что в примере предполагается, что узел сети контролируется через прокси, поэтому он указан как Subject сертификата:

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. Настройте шифрование в веб-интерфейсе Zabbix для узла сети, контролируемого этим агентом.

  • Перейдите в: Сбор данных → Узлы сети.
  • Выберите узел сети и нажмите вкладку Шифрование.

В приведенном ниже примере заполнены поля Issuer и Subject. Дополнительные сведения о том, зачем и как использовать эти поля, см. в разделе Ограничение допустимых издателя и субъекта сертификата.

Веб-сервис Zabbix

1. Подготовьте файлы с корневыми CA-сертификатами, сертификатом/цепочкой сертификатов веб-сервиса Zabbix и закрытым ключом, как описано в разделе сервер Zabbix. Затем соответствующим образом измените параметры TLSCAFile, TLSCertFile и TLSKeyFile в файле конфигурации веб-сервиса Zabbix.

2. Измените дополнительный параметр TLS в файле конфигурации веб-сервиса Zabbix: TLSAccept=cert

Параметры TLS в итоговом файле конфигурации веб-сервиса могут выглядеть следующим образом:

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

3. Настройте сервер Zabbix для подключения к веб-сервису Zabbix, настроенному на использование TLS, изменив параметр WebServiceURL в файле конфигурации сервера Zabbix:

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

Ограничение разрешённых Эмитента и Субъекта сертификата

Когда два компонента Zabbix (например, сервер и агент) устанавливают TLS соединение, они оба проверяют сертификаты друг друга. Если сертификат узла подписан доверенным CA (с предварительно подготовленным сертификатом верхнего уровня в TLSCAFile), является действительным, он не истёк и проходит некоторые другие проверки, то коммуникация между компонентами может продолжаться. В этом простейшем случае эмитент и субъект сертификата не проверяются.

Однако, здесь имеется риск: кто угодно при наличии действительного сертификата может выдать себя за другого (например, сертификат хоста может быть использован, чтобы выдать себя за сервер). Хотя это может быть приемлемо в небольших средах, где сертификаты подписываются выделенным внутренним CA, а риск выдачи себя за кого-либо низок, этого может быть недостаточно в более крупных или более чувствительных к безопасности средах.

Если ваш CA верхнего уровня выдаёт другие сертификаты, которые не должны приниматься Zabbix, или вы хотите снизить риск действий от чужого имени, вы можете ограничить разрешённые сертификаты, указав их эмитента и субъект.

Например, в файле конфигурации Zabbix прокси вы можете указать:

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

С этими настройками активный прокси не будет общаться с Zabbix сервером, чей сертификат имеет других эмитента и субъект. Аналогично, пассивный прокси не примет запросы от такого сервера.

Правила сопоставления строк Issuer и Subject

Правила сопоставления строк Issuer и Subject следующие:

  • Строки Issuer и Subject проверяются независимо. Обе строки необязательны.
  • Неуказанная строка означает, что принимается любая строка.
  • Строки сравниваются как есть и должны совпадать точно.
  • Поддерживаются символы UTF-8. Однако подстановочные знаки (*) и регулярные выражения не поддерживаются.
  • Реализованы следующие требования RFC 4514 - символы, требующие экранирования (с помощью обратной косой черты '\', U+005C):
    • в любом месте строки: '"' (U+0022), '+' (U+002B), ',' (U+002C), ';' (U+003B), '<' (U+003C), '>' (U+003E), '\\' (U+005C);
    • в начале строки: пробел (' ', U+0020) или знак номера ('#', U+0023);
    • в конце строки: пробел (' ', U+0020).
  • Символы null (U+0000) не поддерживаются. Если встречается символ null, сопоставление завершается неудачей.
  • Стандарты RFC 4517 и RFC 4518 не поддерживаются.

Например, если строки организации (O) в Issuer и Subject содержат пробелы в конце, а строка организационного подразделения (OU) в Subject содержит двойные кавычки, эти символы необходимо экранировать:

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
Порядок и форматирование полей

Zabbix следует рекомендациям RFC 4514, в которых для этих полей указан "обратный" порядок: начиная с полей нижнего уровня (CN), переходя к полям среднего уровня (OU, O) и заканчивая полями высшего уровня (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

В отличие от этого, OpenSSL по умолчанию отображает строки Issuer и Subject в порядке от верхнего уровня к нижнему. В следующем примере поля Issuer и Subject начинаются с верхнего уровня (DC) и заканчиваются полем нижнего уровня (CN). Форматирование с пробелами и разделителями полей также зависит от используемых параметров, поэтому оно не будет соответствовать формату, требуемому 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

Чтобы правильно отформатировать строки Issuer и Subject для Zabbix, вызовите OpenSSL со следующими параметрами:

$ 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

После этого вывод будет в обратном порядке, с разделением запятыми, и его можно будет использовать в конфигурационных файлах Zabbix и веб-интерфейсе:

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

Ограничения при использовании расширений сертификатов X.509 v3

При реализации сертификатов X.509 v3 в Zabbix некоторые расширения могут поддерживаться не полностью или могут привести к несовместимому поведению.

Расширение «Альтернативное имя субъекта» (Subject Alternative Name)

Zabbix не поддерживает расширение «Subject Alternative Name», которое используется для указания альтернативных имён DNS — таких как IP адрес или e-mail адрес. В Zabbix проверяется только значение поля «Субъект» сертификата (смотри Ограничение разрешённых Эмитента и Субъекта сертификата). Если сертификат содержит поле subjectAltName, то результат проверки сертификата может зависеть от конкретной комбинации наборов криптографических инструментов, используемых для компиляции компонентов Zabbix. В результате, в зависимости от этих комбинаций, Zabbix может либо принимать, либо отклонять сертификаты.

Расширение «Использование Расширенного Ключа» (Extended Key Usage)

Zabbix поддерживает расширение Extended Key Usage. Однако, если оно используется, то, как правило, требуется, чтобы были указаны как clientAuth (для аутентификации клиента TLS WWW), так и serverAuth (для аутентификации сервера TLS WWW). Например:

  • При пассивных проверках, где Zabbix агент выступает в роли TLS сервера, в сертификате агента должен присутствовать атрибут serverAuth.
  • При активных проверках, где агент выступает в качестве TLS клиента, в сертификате агента должен присутствовать атрибут clientAuth.

Хотя GnuTLS может выдавать предупреждение о нарушениях использования ключа, он обычно позволяет продолжать соединение, несмотря на эти предупреждения.

Расширение «Ограничения Имени» (Name Constraints)

Поддержка расширения Name Constraints различается в разных наборах инструментов шифрования. Убедитесь, что выбранный вами набор инструментов поддерживает это расширение. В зависимости от конкретного набора инструментов криптографии, если эта секция помечена как критическая, то это расширение может помешать Zabbix в загрузке сертификатов CA.

Списки отозванных сертификатов (CRL)

Если сертификат скомпрометирован, CA может отозвать его, включив сертификат в список отозванных сертификатов (CRL). Списки CRL можно настраивать в файлах конфигурации сервера, прокси и агента, используя параметр TLSCRLFile. Например:

TLSCRLFile=/home/zabbix/zabbix_crl_file.crt

Файл zabbix_crl_file.crt в данном случае может содержать списки CRL от нескольких CA и мог бы выглядеть следующим образом:

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

CRL файл загружается только при запуске Zabbix. Для обновления CRL перезапустите Zabbix.

Если компоненты Zabbix скомпилированы с OpenSSL и используются списки CRL, убедитесь, что каждый CA верхнего и промежуточного уровней в цепочках сертификатов имеет соответствующий список CRL (даже если он пустой), включённый в TLSCRLFile.