![openssl 在 GeoTrust Global CA 验证中出错,但 ssllabs.com 将该网站标记为 A+](https://linux22.com/image/753567/openssl%20%E5%9C%A8%20GeoTrust%20Global%20CA%20%E9%AA%8C%E8%AF%81%E4%B8%AD%E5%87%BA%E9%94%99%EF%BC%8C%E4%BD%86%20ssllabs.com%20%E5%B0%86%E8%AF%A5%E7%BD%91%E7%AB%99%E6%A0%87%E8%AE%B0%E4%B8%BA%20A%2B.png)
从我的docker镜像中:
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它表明该证书有效。
如果我在 docker image ssl certs 中手动添加证书,它就会停止抱怨:
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 对此没有抱怨?
答案1
即使您已将 CA 证书包(ca-certificates
)添加到您的 docker 镜像中,但 GeoTrust Global CA 根证书似乎并未包含在该包中。
当您最初运行时,openssl s_client
客户端会从 Apple 网站下载证书链,并发现最后一个证书是自签名的(由于某种原因,Apple 管理员决定将其作为链的一部分),但由于它不在其信任锚存储中,因此它会抱怨error:num=19:self signed certificate in certificate chain
。
添加根 CA 证书后运行命令时,从 Apple 网站下载的链以其现在信任的证书结尾,因此没有任何抱怨。
至于证书丢失的原因 - 您需要向为您提供 docker 映像的人提出这个问题。它位于当前的完整 Debian 10.4 发行版上,也位于当前的 Alpine 发行版上,这两个发行版都受 docker 的欢迎。正如您所说,SSL Labs 也了解它。如果让我猜的话,我会说底层的基本 docker 映像相当旧。
答案2
Debian 似乎最近取消了对 GeoTrust Global CA 的信任。请参阅http://metadata.ftp-master.debian.org/changelogs/main/c/ca-certificates/unstable_changelog
我猜测更新到最新安全更新的 Docker 镜像不会信任该网站。
我认为,对该 CA 的信任被错误地删除了。我已联系 ca-certificates 软件包维护者询问此事。
有关的:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962596