1 Использование сертификатов
Обзор
Zabbix может использовать сертификаты RSA в формате PEM, подписанные общедоступным или внутренним центром сертификации (CA).
Проверка сертификата выполняется по предварительно настроенному сертификату CA. При необходимости можно использовать списки отзыва сертификатов (CRL).
Для каждого компонента Zabbix можно настроить только один сертификат.
Дополнительную информацию о настройке и эксплуатации внутреннего CA, создании и подписывании запросов на сертификаты, а также отзыве сертификатов см. в руководствах, таких как OpenSSL PKI Tutorial v2.0.
Тщательно продумайте и протестируйте расширения сертификатов. Подробнее см. в разделе Ограничения при использовании расширений сертификатов X.509 v3.
Параметры настройки сертификатов
Для настройки сертификатов в компонентах Zabbix поддерживаются следующие параметры конфигурации.
| Параметр | Обязательный | Описание |
|---|---|---|
| TLSCAFile | да | Полный путь к файлу, содержащему сертификаты корневого(ых) центра(ов) сертификации (CA) для проверки сертификата другой стороны. При использовании цепочки сертификатов с несколькими элементами сначала указывайте сертификаты CA более низкого уровня, затем сертификаты CA более высокого уровня. Сертификаты от нескольких CA могут быть включены в один файл. |
| TLSCRLFile | нет | Полный путь к файлу, содержащему списки отзыва сертификатов (CRL). |
| TLSCertFile | да | Полный путь к файлу, содержащему сертификат. При использовании цепочки сертификатов с несколькими элементами сначала указывайте сертификат сервера, прокси или агента, затем сертификаты CA более низкого уровня и в конце сертификаты CA более высокого уровня. |
| TLSKeyFile | да | Полный путь к файлу, содержащему закрытый ключ. Убедитесь, что этот файл доступен для чтения только пользователю Zabbix, установив соответствующие права доступа. |
| TLSServerCertIssuer | нет | Разрешенный издатель сертификата сервера. |
| TLSServerCertSubject | нет | Разрешенный субъект сертификата сервера. |
Примеры настройки
После настройки необходимых сертификатов настройте компоненты 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-соединение, они проверяют сертификаты друг друга.
Если сертификат другой стороны подписан доверенным центром сертификации (с предварительно настроенным корневым сертификатом в TLSCAFile), является действительным, не истек и проходит другие проверки, то обмен данными между компонентами может продолжаться.
В этом простейшем случае издатель и субъект сертификата не проверяются.
Однако это создает риск: любой, у кого есть действительный сертификат, может выдать себя за кого угодно (например, сертификат узла сети может быть использован для выдачи себя за сервер). Хотя это может быть приемлемо в небольших средах, где сертификаты подписываются выделенным внутренним центром сертификации и риск подмены невелик, в более крупных средах или средах с повышенными требованиями к безопасности этого может быть недостаточно.
Если ваш корневой центр сертификации выдает сертификаты, которые не должны приниматься 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).
- в любом месте строки: '
- Нулевые символы (U+0000) не поддерживаются. Если встречается нулевой символ, сопоставление завершится неудачей.
- Стандарты 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-адреса или адреса электронной почты.
Zabbix может проверять только значение в поле Subject сертификата (см. Ограничение допустимого издателя и субъекта сертификата).
Если сертификаты содержат поле 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 в цепочках сертификатов в TLSCRLFile включён соответствующий CRL (даже если он пустой).