Alpine Linux和Busybox在处理证书方面有所不同吗?

12

我从一个基础镜像 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选项以查看它)

Translated text:

主要我将包管理工具更改为拉取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

阿尔派因何在此有所不同?为什么我的curl/certs可能会失败?


相当老旧,不过您是否也尝试过 PEM? - Andreas
1个回答

19

为了确保CA证书被创建/更新到它们应该在的位置,请尝试在这个答案之后添加update-ca-certificates

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/*

7
产生了这个错误:警告:ca-certificates.crt 不仅包含一个证书或CRL:跳过。 - Greg
比较 Alpine 和 Busybox 后,我也注意到 Busybox 有 nss libs 而 Alpine 没有。不确定这是否很重要,所以我将 nss 添加为另一个“添加”。不幸的是,这也没有成功。 - Greg
1
@Greg 你在使用Alpine 3.2吗?(因为这个问题应该在3.2中得到解决:https://github.com/gliderlabs/docker-alpine/issues/30) - VonC
刚刚尝试了alpine:3.2,它确实删除了那个警告信息。不幸的是,它并没有解决我的原始证书问题。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接