Zabbix может использовать RSA сертификаты в формате PEM, подписанные публичным или внутренним центром сертификации (certificate authority, CA).
Проверка сертификата выполняется с использованием заранее подготовленного сертификата CA. Опционально можно использовать списки отозванных сертификатов (Certificate Revocation Lists, CRL).
Каждый компонент Zabbix может иметь только один настроенный сертификат.
Для получения более подробной информации о том, как настроить и управлять внутренним CA, как генерировать и подписывать запросы на сертификаты, как отзывать сертификаты, — обратитесь к руководствам, таким как OpenSSL PKI Tutorial v2.0 [en] .
Тщательно продумывайте и тестируйте ваши расширения сертификатов. Для получения более подробной информации смотри Ограничения при использовании расширений сертификатов X.509 v3.
Параметр | Обязателен | Описание |
---|---|---|
TLSCAFile | да | Абсолютный путь к файлу, который содержит сертификаты CA верхнего уровня для верификации сертификата узла. При наличии цепочки сертификатов с несколькими членами, они должны быть упорядочены: сначала сертификаты CA нижних уровней, за ними следуют сертификаты CA более высокого уровня. Сертификаты из нескольких CA можно включать в один файл. |
TLSCRLFile | нет | Абсолютный путь к файлу, который содержит Списки отозванных сертификатов (CRL). |
TLSCertFile | да | Абсолютный путь к файлу, который содержит сертификат. В случае цепочки сертификатов с несколькими членами они должны быть упорядочены: сначала сертификат сервера, прокси или агента, затем сертификаты CA нижних уровней и в завершение — сертификаты CA более высокого уровня. |
TLSKeyFile | да | Абсолютный путь к файлу, который содержит закрытый ключ (private key). Убедитесь, что этот файл доступен для чтения только пользователю Zabbix, выставив соответствующие права доступа. |
TLSServerCertIssuer | нет | Разрешённый эмитент сертификата сервера. |
TLSServerCertSubject | нет | Разрешённый субъект сертификата сервера. |
После настройки необходимых сертификатов настройте компоненты 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 (X509v3 Subject Alternative Name) или Тип сертификата Netscape (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
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
1. Подготовьте файлы с сертификатами CA верхнего уровня, сертификатом (или цепочкой сертификатов) Zabbix прокси и закрытым ключом, как описано в разделе Zabbix сервер. Затем соответственно отредактируйте параметры TLSCAFile
, TLSCertFile
и TLSKeyFile
в файле конфигурации Zabbix прокси.
2. Отредактируйте дополнительные параметры TLS в файле конфигурации Zabbix proxy:
TLSConnect=cert
TLSAccept=cert
Чтобы повысить безопасность прокси, вы также можете задать параметры TLSServerCertIssuer
и TLSServerCertSubject
. Для получения дополнительной информации см. Ограничение разрешённых Эмитента и Субъекта сертификата.
В конечном итоге параметры TLS в файле конфигурации прокси могут выглядеть следующим образом:
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
3. Настройте шифрование для этого прокси в веб-интерфейсе Zabbix:
В примере ниже поля Эмитент (Issuer) и Субъект (Subject) заполнены. За дополнительной информацей о том, для чего и как использовать эти поля, обратитесь к Ограничение разрешённых эмитента и субъекта сертификата.
Для активного прокси:
Для пассивного прокси:
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
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:
В примере ниже поля Эмитент и Субъект заполнены. Дополнительную информацию о том, для чего и как использовать эти поля, смотрите Ограничение разрешённых Эмитента и Субъекта сертификата.
1. Подготовьте файлы с сертификатами CA верхнего уровня, сертификатом или цепочкой сертификатов веб-сервиса Zabbix и закрытым ключом, как описано в разделе Zabbix сервер. Затем отредактируйте параметры TLSCAFile
, TLSCertFile
и TLSKeyFile
в файле конфигурации веб-сервиса Zabbix соответствующим образом.
2. Отредактируйте дополнительнй параметр TLS в файле конфигурации веб-сервиса Zabbix: TLSAccept=cert
Параметры TLS в итоговом файле конфигурации веб-сервиса могут выглядеть следуюим образом:
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key
3. Настройте сервер Zabbix для подключения к веб-сервису Zabbix с настроенным TLS, отредактировав параметр WebServiceURL
в файле конфигурации Zabbix сервера:
Когда два компонента 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
проверяются независимо. Обе строки опциональны.*
) или регулярные выражения не поддерживаются.\
', U+005C):
"
' (U+0022), '+
' (U+002B), ',
' (U+002C), ';
' (U+003B), '<
' (U+003C), '>
' (U+003E), '\\
' (U+005C);#
', U+0023);Например, если строки Issuer
и Subject
организации (O
) содержат конечные пробелы, а строка Subject
подразделения (OU
) содержит двойные кавычки, эти символы необходимо экранировать:
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 [en], который определяет «обратный» порядок для этих полей, начиная с полей самого низкого уровня (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
Для того чтобы правильно отформатировать для Zabbix строки Issuer и Subject, вызовите 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 в 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). Например:
Хотя GnuTLS может выдавать предупреждение о нарушениях использования ключа, он обычно позволяет продолжать соединение, несмотря на эти предупреждения.
Расширение «Ограничения Имени» (Name Constraints)
Поддержка расширения Name Constraints различается в разных наборах инструментов шифрования. Убедитесь, что выбранный вами набор инструментов поддерживает это расширение. В зависимости от конкретного набора инструментов криптографии, если эта секция помечена как критическая, то это расширение может помешать Zabbix в загрузке сертификатов CA.
Если сертификат скомпрометирован, CA может отозвать его, включив сертификат в список отозванных сертификатов (CRL). Списки CRL можно настраивать в файлах конфигурации сервера, прокси и агента, используя параметр TLSCRLFile
. Например:
Файл 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
.