Alpine Linux 处理证书的方式与 Busybox 不同吗?
Posted
技术标签:
【中文标题】Alpine Linux 处理证书的方式与 Busybox 不同吗?【英文标题】:Does Alpine Linux handle certs differently than Busybox? 【发布时间】:2016-01-26 00:17:01 【问题描述】:我从一个基本映像 errordeveloper/oracle-jdk 开始。此处显示此 Dockerfile 以供参考:
FROM progrium/busybox
MAINTAINER Ilya Dmitrichenko <errordeveloper@gmail.com>
RUN opkg-install curl ca-certificates
ENV JAVA_HOME /usr/jdk1.8.0_31
RUN curl \
--silent \
--location \
--retry 3 \
--cacert /etc/ssl/certs/GeoTrust_Global_CA.crt \
--header "Cookie: oraclelicense=accept-securebackup-cookie;" \
"http://download.oracle.com/otn-pub/java/jdk/8u31-b13/jdk-8u31-linux-x64.tar.gz" \
| gunzip \
| tar x -C /usr/ \
&& ln -s $JAVA_HOME /usr/java \
&& rm -rf $JAVA_HOME/src.zip $JAVA_HOME/javafx-src.zip $JAVA_HOME/man
ENV PATH $PATH:$JAVA_HOME/bin
ENTRYPOINT [ "java" ]
CMD [ "-version" ]
我想将其移至 Alpine Linux,因此进行了以下更改:
FROM alpine
MAINTAINER Ilya Dmitrichenko <errordeveloper@gmail.com>
RUN apk --update upgrade && apk add curl ca-certificates && rm -rf /var/cache/apk/*
ENV JAVA_HOME /usr/jdk1.8.0_31
RUN curl \
--silent \
--location \
--retry 3 \
--cacert /etc/ssl/certs/GeoTrust_Global_CA.crt \
--header "Cookie: oraclelicense=accept-securebackup-cookie;" \
"http://download.oracle.com/otn-pub/java/jdk/8u31-b13/jdk-8u31-linux-x64.tar.gz" \
| gunzip \
| tar x -C /usr/ \
&& ln -s $JAVA_HOME /usr/java \
&& rm -rf $JAVA_HOME/src.zip $JAVA_HOME/javafx-src.zip $JAVA_HOME/man
ENV PATH $PATH:$JAVA_HOME/bin
ENTRYPOINT [ "java" ]
CMD [ "-version" ]
主要是我改了包管理工具下拉curl和ca-certificates。
在我的机器上确认原始构建干净后(确实如此),我尝试了我的版本并得到了这个错误:(我关闭了 curl 上的 --silent 以查看它)
Step 4 : RUN curl --location --retry 3 --cacert /etc/ssl/certs/GeoTrust_Global_CA.crt --header "Cookie: oraclelicense=accept-securebackup-cookie;" "http://download.oracle.com/otn-pub/java/jdk/8u31-b13/server-jre-8u31-linux-x64.tar.gz" | gunzip | tar x -C /usr/ && ln -s $JAVA_HOME /usr/java && rm -rf $JAVA_HOME/man
---> Running in c91e4939f851
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (77) error setting certificate verify locations:
CAfile: /etc/ssl/certs/GeoTrust_Global_CA.crt
CApath: none
gunzip: invalid magic
tar: short read
The command '/bin/sh -c curl --location --retry 3 --cacert /etc/ssl/certs/GeoTrust_Global_CA.crt --header "Cookie: oraclelicense=accept-securebackup-cookie;" "http://download.oracle.com/otn-pub/java/jdk/8u31-b13/server-jre-8u31-linux-x64.tar.gz" | gunzip | tar x -C /usr/ && ln -s $JAVA_HOME /usr/java && rm -rf $JAVA_HOME/man' returned a non-zero code: 1
Alpine 在这里有什么不同吗?为什么我的 curl/certs 会失败?
【问题讨论】:
相当老了,但你也尝试过 PEM 吗? 【参考方案1】:为了确保 CA 证书是在它们应该创建/更新的位置,尝试添加(在this answer 之后)update-ca-certificates
:
apk add ca-certificates
update-ca-certificates
在你的情况下:
RUN apk --update upgrade && \
apk add curl ca-certificates && \
update-ca-certificates && \
rm -rf /var/cache/apk/*
【讨论】:
产生了这个错误:警告:ca-certificates.crt 不包含一个证书或 CRL:正在跳过 比较 Alpine 和 Busybox 我还注意到 Busybox 有 nss 库而 Alpine 没有。不确定这是否重要,所以我将 nss 添加为另一个“添加”。不幸的是,也没有骰子。 @Greg 你在使用 Alpine 3.2 吗? (因为这应该在 3.2 中修复:github.com/gliderlabs/docker-alpine/issues/30) 刚刚尝试使用 alpine:3.2,它确实删除了该警告消息。遗憾的是,它并没有影响我原来的证书问题。以上是关于Alpine Linux 处理证书的方式与 Busybox 不同吗?的主要内容,如果未能解决你的问题,请参考以下文章
Alpine Linux添加Let‘s Encrypt CA证书或者自签CA证书
alpine linux中如何使用crontab执行定时任务
alpine linux中如何使用crontab执行定时任务