Шифрование с использованием сертификатов

Обзор

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

Проверка сертификата выполняется по предварительно настроенному сертификату CA. При необходимости можно использовать списки отзыва сертификатов (CRL).

Для каждого компонента Zabbix можно настроить только один сертификат.

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

Тщательно продумайте и протестируйте расширения сертификата. Подробнее см. в разделе Ограничения на использование расширений сертификата 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:

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

В приведенных ниже примерах поля Издатель и Субъект заполнены. Дополнительную информацию о назначении этих полей и способах их использования см. в разделе Ограничение допустимых издателя и субъекта сертификата.

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

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

Агент 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 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 для узла сети, отслеживаемого этим агентом.

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

В примере ниже заполнены поля Издатель и Субъект. Дополнительную информацию о назначении и использовании этих полей см. в разделе Ограничение допустимых издателя и субъекта сертификата.

Веб-сервис Zabbix

1. Подготовьте файлы с сертификатами корневого центра сертификации, сертификатом/цепочкой сертификатов веб-сервиса 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).
  • Символы 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-адреса или адреса электронной почты. Zabbix может проверять только значение в поле Subject сертификата (см. Ограничение разрешенных Issuer и Subject сертификата). Если сертификаты содержат поле subjectAltName, результат проверки сертификата может различаться в зависимости от конкретных криптографических библиотек, использованных при сборке компонентов Zabbix. В результате Zabbix может как принять, так и отклонить сертификаты в зависимости от этой комбинации.

Расширение Extended Key Usage

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

  • При пассивных проверках, где 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.

Устранение неполадок с сертификатами

OpenSSL используется с CRL, и для некоторого CA в цепочке сертификатов его CRL не включен в TLSCRLFile

В журнале сервера TLS в случае узла-пира OpenSSL:

failed to accept an incoming connection: from 127.0.0.1: TLS handshake with 127.0.0.1 returned error code 1: \
    file s3_srvr.c line 3251: error:14089086: SSL routines:ssl3_get_client_certificate:certificate verify failed: \
    TLS write fatal alert "unknown CA"

В журнале сервера TLS в случае узла-пира GnuTLS:

failed to accept an incoming connection: from 127.0.0.1: TLS handshake with 127.0.0.1 returned error code 1: \
    file rsa_pk1.c line 103: error:0407006A: rsa routines:RSA_padding_check_PKCS1_type_1:\
    block type is not 01 file rsa_eay.c line 705: error:04067072: rsa routines:RSA_EAY_PUBLIC_DECRYPT:paddin
CRL истек или истекает во время работы сервера

[OpenSSL]{.underline}, в журнале сервера:

  • до истечения срока действия:
<!-- -->
cannot connect to proxy "proxy-openssl-1.0.1e": TCP successful, cannot establish TLS to [[127.0.0.1]:20004]:\
    SSL_connect() returned SSL_ERROR_SSL: file s3_clnt.c line 1253: error:14090086:\
    SSL routines:ssl3_get_server_certificate:certificate verify failed:\
    TLS write fatal alert "certificate revoked"
  • после истечения срока действия:
<!-- -->
cannot connect to proxy "proxy-openssl-1.0.1e": TCP successful, cannot establish TLS to [[127.0.0.1]:20004]:\
    SSL_connect() returned SSL_ERROR_SSL: file s3_clnt.c line 1253: error:14090086:\
    SSL routines:ssl3_get_server_certificate:certificate verify failed:\
    TLS write fatal alert "certificate expired"

Суть здесь в том, что при действительном CRL отозванный сертификат сообщается как "certificate revoked". Когда CRL истекает, сообщение об ошибке меняется на "certificate expired", что довольно вводит в заблуждение.

[GnuTLS]{.underline}, в журнале сервера:

  • до и после истечения срока действия одно и то же:
<!-- -->
cannot connect to proxy "proxy-openssl-1.0.1e": TCP successful, cannot establish TLS to [[127.0.0.1]:20004]:\
      invalid peer certificate: The certificate is NOT trusted. The certificate chain is revoked.
Самоподписанный сертификат, неизвестный CA

[OpenSSL]{.underline}, в журнале:

error:'self signed certificate: SSL_connect() set result code to SSL_ERROR_SSL: file ../ssl/statem/statem_clnt.c\
      line 1924: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:\
      TLS write fatal alert "unknown CA"'

Это наблюдалось, когда сертификат сервера по ошибке имел одинаковые строки Issuer и Subject, хотя был подписан CA. Issuer и Subject равны в корневом сертификате CA верхнего уровня, но они не могут быть равны в сертификате сервера. (То же относится к сертификатам прокси и агента.)

Чтобы проверить, содержит ли сертификат одинаковые записи Issuer и Subject, выполните:

openssl x509 -in <yourcertificate.crt> -noout -text

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