У нас есть оркестровка микросервисов, работающих на сервере. Сервис nginx действует как прокси между микросервисами. Мы хотели бы иметь все коммуникации по SSL с нашими самозаверяющими сертификатами.
Мы хотим добавить наш частный ЦС в каждую службу (запущенную на Debian Buster), чтобы она считалась действительной везде в этой службе. Мы генерируем наш сертификат сервера и CA следующим образом:
# Generate Root CA Certificate
openssl genrsa -des3 -out CA-key.pem 2048
openssl req -new -key CA-key.pem -x509 -days 1000 -out CA-cert.pem
# Generate a Signing a Server Certificate
openssl genrsa -des3 -out server-key.pem 2048
openssl req –new –config openssl.cnf –key server-key.pem –out signingReq.csr
openssl x509 -req -days 365 -in signingReq.csr -CA CA-cert.pem -CAkey CA-key.pem -CAcreateserial -out server-cert.pem
Однако мы не можем заставить микросервисы считать сертификат действительным и доверять ему. Когда в микросервисе выдается запрос на получение с использованием библиотеки запросов Python, выдается следующее исключение:
requests.exceptions.SSLError: HTTPSConnectionPool(host='server.name', port=443): Max
retries exceeded with url: /url/to/microservice2/routed/via/nginx/ (Caused by
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate
verify failed: self signed certificate (_ssl.c:1076)')))
То, что мы пробовали до сих пор:
- Копирование сертификата в / usr / share / ca-certificate / и выполнение команд
sudo dpkg-reconfigure ca-certificates
и / или update-ca-certificates
. - Установите для переменной
REQUESTS_CA_BUNDLE
env значение /path/to/internal-CA-cert.pem
- Установите для переменной
SSL_CERT_FILE
env значение /path/to/internal-CA-cert.pem
Единственный работающий обходной путь - установка valid=False
в requests.get(url, params=params, verify=False, **kwargs)
, чтобы игнорировать действительность сертификата SSL. Но это не тот мир, который мы хотели бы реализовать для всех микросервисов и коммуникаций.