busybox支持https

容器内没有系统 CA 根证书,导致无法验证 HTTPS/TLS 证书。
错误信息:

tls: failed to verify certificate: x509: certificate signed by unknown authority

一、问题原因

BusyBox 镜像极度精简,不包含 /etc/ssl/certs/ca-certificates.crt/usr/share/ca-certificates/
因此当你执行 HTTPS 请求(例如 wget https://ossutil https://apk addcurl 等)时,TLS 验证无法找到受信任的根证书链。


二、安装 CA 证书包

如果 BusyBox 镜像基于 Alpine(例如 busybox:1.36.1-musl),可以通过:

1
2
apk add --no-cache ca-certificates
update-ca-certificates

在 Dockerfile 中添加:

1
2
3
4
5
6
FROM busybox:1.36.1-musl

RUN mkdir -p /etc/ssl/certs && \
echo ">>> 安装根证书..." && \
wget -q -O /tmp/ca-certificates.tar.gz https://curl.se/ca/cacert.pem && \
mv /tmp/ca-certificates.tar.gz /etc/ssl/certs/ca-certificates.crt

但更通用和安全的写法是:

1
2
3
4
5
6
7
FROM alpine:3.20 AS certs
RUN apk add --no-cache ca-certificates

FROM busybox:1.36.1-uclibc
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

CMD ["sh"]

优点:安全、标准、兼容 HTTPS 客户端验证。


三、快速验证修复是否成功

进入容器后执行:

1
wget https://www.google.com -O /dev/null

或:

1
openssl s_client -connect oss-cn-hangzhou.aliyuncs.com:443 </dev/null

如果没有出现 x509: certificate signed by unknown authority,说明证书链已正常工作。


四、证书信任链原理

25e341792f519956ace952a96e807ff7.png