Из моего образа докера:
FROM ruby:2.7
RUN apt-get update && apt-get install -y libicu-dev default-libmysqlclient-dev curl jq poppler-utils ghostscript vim-tiny zip ffmpeg
ARG GITHUB_ACCESS_TOKEN=wrong
ARG TOC_RELEASE=latest
ARG COMMIT_SHA=unknown
# Force UTF-8 encoding (default is POSIX/ASCII)
ENV LANG C.UTF-8
RUN apt-get update -q && \
apt-get install -q -y --no-install-recommends \
ca-certificates curl unzip default-jre-headless && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
Если я попытаюсь подключиться к reportingitc-reporter-sh-mdn.apple.com:443
Я получаю следующую ошибку:
# openssl s_client -showcerts -connect reportingitc-reporter-sh-mdn.apple.com:443
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify error:num=19:self signed certificate in certificate chain
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 CN = Apple IST CA 2 - G1, OU = Certification Authority, O = Apple Inc., C = US
verify return:1
depth=0 CN = reportingitc-reporter.apple.com, OU = management:idms.group.135879, O = Apple Inc., ST = California, C = US
verify return:1
Если я проверю сайт с помощью ssllabs https://www.ssllabs.com/ssltest/analyze.html?d=reportingitc-reporter-sh-mdn.apple.com там написано, что сертификат действителен.
Если я добавлю сертификат вручную в ssl-сертификаты образа докера, он перестанет жаловаться:
RUN curl --max-time 300 --retry 5 --retry-delay 1 --retry-max-time 900 --silent -o /usr/local/share/ca-certificates/geotrust.crt https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.pem
RUN update-ca-certificates
Я не понимаю, почему я должен это делать и почему ssllabs не жалуется на это?
Даже если вы добавили пакет сертификатов CA (ca-certificates
) в образ докера, похоже, что корневой сертификат GeoTrust Global CA не включен в этот пакет.
Когда вы изначально запускаете openssl s_client
клиент загружает цепочку сертификатов с сайта Apple и обнаруживает, что последний сертификат самоподписанный (по какой-то причине администраторы Apple решили включить его как часть цепочки), но поскольку его нет в хранилище доверенных якорей, он жалуется на error:num=19:self signed certificate in certificate chain
.
Когда вы запускаете свою команду после добавления сертификата корневого ЦС, цепочка, загруженная с сайта Apple, заканчивается сертификатом, которому он теперь доверяет, поэтому никаких жалоб.
Что касается того, почему отсутствует сертификат - вам нужно будет задать этот вопрос тому, кто предоставил вам образ докера. Он находится в текущем полном дистрибутиве Debian 10.4, а также в текущем дистрибутиве Alpine, оба из которых популярны среди докеров. Это также, как вы говорите, понимают SSL Labs. Если бы я угадал, я бы сказал, что базовый образ докера довольно старый.
Похоже, что Debian недавно снял доверие с GeoTrust Global CA. Видеть http://metadata.ftp-master.debian.org/changelogs/main/c/ca-certificates/unstable_changelog
Думаю, образы Docker, обновленные до последних обновлений безопасности, не будут доверять этому сайту.
Я считаю, что доверие к этому ЦС было удалено по ошибке. Я связался с сопровождающим пакета ca-сертификатов, чтобы спросить об этом.
Связанный: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962596