Ошибка проверки SSL-сертификата: Hostname mismatch
Симптом
В логах ПринтМенеджера или при установке появляется ошибка:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed:
Hostname mismatch, certificate is not valid for '<адрес>'
Возможные проявления:
- не работает синхронизация Мониторинга и ПринтМенеджера;
- CUPS не создаёт принтеры;
- встроенное приложение не подключается к серверу.
Причина
Компонент обращается к серверу по адресу, который отсутствует в сертификате (CN или Subject Alternative Name).
Типичные ситуации:
- система была установлена по hostname, а сертификат выпущен для IP-адреса (или наоборот);
- после обновления изменился адрес сервера, а сертификат не был перевыпущен;
- в переменной
MON_HOSTNAMEилиMONITORING_ADDRESSуказан неверный адрес; - при использовании собственных сертификатов отсутствует необходимый CN или SAN;
- в кластерной конфигурации или филиальной сети один сертификат используется для нескольких серверов.
Диагностика
Проверьте, для какого адреса выпущен сертификат:
openssl s_client -connect <адрес_сервера>:<порт> </dev/null 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
Сравните результат с адресом, по которому компонент обращается к серверу.
Если Мониторинг и ПринтМенеджер установлены на разных серверах:
grep MONITORING_ADDRESS /opt/printmanager/.env
Если Мониторинг и ПринтМенеджер установлены на одном сервере — проверьте значение EXT_HOSTNAME в панели администратора ПринтМенеджера.
Решение
Автоматические сертификаты
Переустановка без SSL-параметров пересоздаёт сертификаты автоматически под текущий адрес:
# М
sudo curl -L https://s3.printum.io/box/monitoring/install.sh | sudo -E bash
# ПМ
sudo curl -L https://s3.printum.io/distrib/printum-printmanager/install.sh | sudo -E bash
Собственные сертификаты
Перевыпустить сертификат для актуального адреса сервера. CN и SAN должны содержать адрес, по которому компонент обращается к серверу. Затем обновить с новыми файлами:
sudo curl -L https://s3.printum.io/box/monitoring/install.sh | \
sudo -E SSL_CERT=/path/cert.crt \
SSL_KEY=/path/cert.key \
SSL_CERT_CA=/path/ca.crt bash -s agent
Кластер и филиальная сеть
Каждый сервер должен использовать собственный сертификат. Все сертификаты должны быть выпущены одним удостоверяющим центром (CA).