У моей компании есть собственный внутренний центр сертификации для внутренних служб, и мне нужно получить доступ к подключаемому Ansible AWX [python], чтобы поговорить с одной из наших внутренних служб, которая использует сертификат, подписанный этим центром сертификации.В основном:
- AWX раскручивает контейнер
awx_task
с установленным /etc/pki/ca-trust/source/anchors
, который содержит корневой сертификат CA.[перепроверено] update-ca-trust
выполняется, объединяя сертификат CA в различные вещи, включая /etc/pki/tls/certs/ca-bundle.crt
.[перепроверено] requests
следует использовать этот комплект.В контейнере или на хосте нет переменных среды, связанных с CA, которые могли бы переопределить это.
Однако, когда я запускаю тестовый запуск Ansible play, который выполняется внутри awx_task
Я получаю сообщение об ошибке:
reports.exceptions.SSLError: HTTPSConnectionPool (host = 'vault.example.com', port = 443): максимальное число повторов превышено с помощью url: / (вызвано SSLError (Ошибка SSLError (1, u '[SSL: CERTIFICATE_VERIFY_FAILED], проверка сертификата не удалась (_ssl.c: 618)'),))
На хост-компьютере я могу запустить
import requests
requests.get("https://vault.example.com")
и получаю 200
ответ, и если я strace
процесс, я вижу, что он читает /etc/pki/tls/certs/ca-bundle.crt
.Но изнутри awx_task
я получаю те же requests.exceptions.SSLError
, что и выше.К сожалению, Docker не позволяет мне запускать strace внутри контейнера, поэтому я не вижу, что он пытается прочитать.
Но если я изменю код на:
import requests
requests.get("https://vault.example.com", verify="/etc/pki/tls/certs/ca-bundle.crt")
, я получу200
ответ изнутри контейнера.
Что мне здесь не хватает?