TLS проверки с помощью Proto Observability
Описание
TLS-проверка подключается к сервису по TLS (или читает файл сертификата) и контролирует:
- доступность TLS-соединения;
- версию протокола TLS, согласованную с сервером;
- корректность сертификата: цепочку доверия и соответствие имени сервера;
- срок действия сертификата — с предупреждением заранее.
Проверка подходит для веб-сервисов, API, почтовых серверов, баз данных с TLS и любых других сервисов, где важно не пропустить истечение сертификата.
Установка
Проверка входит в поставку Агента Proto Observability. Отдельная установка не требуется. Для проверки удалённых сервисов Агенту нужен сетевой доступ к проверяемому адресу и порту.
Конфигурация
Создайте файл tls.d/conf.yaml в каталоге conf.d/ директории конфигурации Агента (за основу можно взять conf.yaml.example в том же каталоге).
Пример для удалённых сервисов:
init_config:
instances:
- name: portal
server: portal.corp.local
port: 443
days_warning: 30
days_critical: 7
- name: api_by_ip
server: 10.20.0.15
port: 8443
server_hostname: api.corp.local # имя для SNI и проверки сертификата
- name: postgres_tls
server: db.corp.local
port: 5432
start_tls: postgres
Пример для файла сертификата на хосте Агента:
init_config:
instances:
- name: nginx_cert
local_cert_path: /etc/nginx/ssl/portal.pem
Файл сертификата должен быть доступен на чтение пользователю Агента (pobp-agent).
Настройки и их описание
| Настройка | Описание |
|---|---|
server | Имя или IP-адрес сервиса. Обязательный, если не задан local_cert_path. |
port | Порт (по умолчанию 443). |
name | Имя экземпляра проверки; добавляется ко всем данным как тег name. Рекомендуется задавать всегда: других тегов, различающих экземпляры, проверка не добавляет. |
server_hostname | Имя для SNI и для проверки соответствия сертификата. По умолчанию — значение server. Укажите его, если server задан IP-адресом. |
local_cert_path | Путь к файлу сертификата (PEM или DER) вместо подключения к серверу. В этом режиме проверки tls.can_connect и tls.version не выполняются. |
start_tls | Переход на TLS внутри протокола для сервисов, которые не принимают TLS сразу. Поддерживаются postgres и mysql. |
allowed_versions | Допустимые версии протокола: SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3. По умолчанию — только TLSv1.2 и TLSv1.3. Можно задать в init_config для всех экземпляров. |
days_warning | За сколько дней до истечения сертификата tls.cert_expiration переходит в warning (по умолчанию 14). |
days_critical | За сколько дней до истечения сертификата tls.cert_expiration переходит в critical (по умолчанию 7). |
seconds_warning, seconds_critical | Те же пороги в секундах; если заданы, заменяют days_warning и days_critical. |
tls_verify | По умолчанию true. Проверять цепочку доверия сертификата. |
tls_validate_hostname | По умолчанию true. Проверять, что сертификат выдан на server_hostname. |
tls_ca_cert | Путь к файлу или каталогу корневых сертификатов — для сертификатов, выпущенных корпоративным центром сертификации. |
tls_cert, tls_private_key, tls_private_key_password | Клиентский сертификат и ключ — для серверов, требующих взаимной аутентификации. |
fetch_intermediate_certs | По умолчанию false. Загружать недостающие промежуточные сертификаты по ссылкам из сертификата (AIA), если сервер отдаёт неполную цепочку. Агенту нужен доступ к адресам из сертификата. |
send_cert_duration | По умолчанию false. Отправлять метрики tls_issued_days и tls_issued_seconds. |
timeout | Таймаут подключения в секундах (по умолчанию 10). |
tags | Список пользовательских тегов. |
Общие параметры (min_collection_interval, service) описаны на странице Общие параметры интеграций. Для проверки сертификатов интервал можно увеличить до нескольких минут.
Метрики
tls_days_left— дней до истечения сертификата.tls_seconds_left— секунд до истечения сертификата.tls_issued_days— срок, на который выдан сертификат, в днях (приsend_cert_duration: true).tls_issued_seconds— срок, на который выдан сертификат, в секундах (приsend_cert_duration: true).
Сервисные проверки
Сервисные проверки сохраняются как метрики со значением статуса: 0 — ok, 1 — warning, 2 — critical.
tls.can_connect
Метрика tls_can_connect. ok — TLS-соединение установлено, critical — нет. В режиме local_cert_path не отправляется.
tls.version
Метрика tls_version. ok — согласованная версия протокола входит в allowed_versions, critical — не входит. В режиме local_cert_path не отправляется.
tls.cert_validation
Метрика tls_cert_validation. ok — сертификат прошёл проверку, critical — цепочка доверия не построена, сертификат выдан на другое имя или не читается.
tls.cert_expiration
Метрика tls_cert_expiration.
- ok — до истечения больше
days_warning; - warning — осталось меньше
days_warning; - critical — осталось меньше
days_criticalили сертификат уже истёк.
Проверка работоспособности
Запустите команду статуса Агента и убедитесь, что в разделе Collector есть tls без ошибок.
Пример для Linux:
sudo protoobp-agent status
sudo -u pobp-agent protoobp-agent check tls
Команды для других платформ — на странице Команды и проверка работы.
Для оповещения об истекающих сертификатах создайте правило алертинга по метрике tls_days_left или tls_cert_expiration — см. Руководство по настройке оповещений.
Устранение неполадок
tls.cert_validationв статусе critical для сертификата корпоративного центра сертификации. Укажите корневой сертификат вtls_ca_cert.tls.cert_validationв статусе critical при подключении по IP-адресу. Укажите имя, на которое выдан сертификат, вserver_hostname.- Ошибка неполной цепочки сертификатов. Настройте сервер, чтобы он отдавал промежуточные сертификаты, или включите
fetch_intermediate_certs: true. tls.versionв статусе critical. Сервер согласовал устаревшую версию протокола. Отключите старые версии на сервере; если это пока невозможно, добавьте версию вallowed_versions.tls.can_connectв статусе critical. Проверьте, чтоserver:portдоступен из сети Агента и на этом порту работает TLS. Для PostgreSQL и MySQL укажитеstart_tls.