无法将证书添加到 alpine linux 容器

新手上路,请多包涵

我在 alpine linux 容器中有一个小型 python 应用程序,这里是 dockerfile:

 FROM alpine

# basic flask environment
RUN apk add --no-cache bash git nginx uwsgi uwsgi-python py2-pip \
    && pip2 install --upgrade pip \
    && pip2 install flask

# application folder
ENV APP_DIR /app
ENV FLASK_APP app.py

# app dir
RUN mkdir ${APP_DIR} \
    && chown -R nginx:nginx ${APP_DIR} \
    && chmod 777 /run/ -R \
    && chmod 777 /root/ -R
VOLUME [${APP_DIR}]
WORKDIR ${APP_DIR}

# copy config files into filesystem
COPY nginx.conf /etc/nginx/nginx.conf
COPY app.ini /app.ini
COPY entrypoint.sh /entrypoint.sh

RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
COPY ./cert.pem /usr/local/share/ca-certificates/mycert.pem
COPY ./key.pem /usr/local/share/ca-certificates/mykey.pem
COPY ./ssl_password_file.pass /etc/keys/global.pass
RUN update-ca-certificates

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["/entrypoint.sh"]

这在 2 周前工作得很好,但是当我最近尝试重建它时,我收到了这个错误:

 WARNING: ca-certificates.crt does not contain exactly one certificate or CRL: skipping
WARNING: ca-cert-mykey.pem.pem does not contain exactly one certificate or CRL: skipping

所以我检查了这些文件,发现由于某种原因,现在文件 ca-certificates.crt 现在有一个证书链。我在堆栈溢出时发现 了这个

/etc/ssl/certs/ca-certificates.crt 实际上是从 /usr/local/share/ca-certificates 附加每个单独的证书。

但发生了什么变化?为什么这是一个问题?所以我尝试恢复到旧版本的 alpine linux - 同样的问题。我尝试重新创建证书,我尝试从容器中删除一大堆证书,我在更新之前检查了 pem 文件以确保它们只是一个证书,显然是在运行之后直接

RUN update-ca-certificates

许多证书出现。帮助 ?

原文由 Gil Zellner 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

我认为下面对我有用(我在从 alpine 扩展的 blackfire/blackfire 图像上添加了一个根证书):

 RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/* \
  mkdir /usr/local/share/ca-certificates/extra
COPY .docker/other/cert_Intertrials-CA.crt /usr/local/share/ca-certificates/extra
RUN update-ca-certificates

然后我登录到该虚拟机并看到它已将其添加到合并的证书文件 /etc/ssl/certs/ca-certificates.crt (我相信我听说它从 /usr/local/share/ca 内部获取每个证书文件-certificates 并合并到 /etc/ssl/certs/ca-certificates.crt 文件中)。

现在您可能会得到“不包含完全一个证书或 CRL:跳过”错误,但我听说这很好。

https://github.com/gliderlabs/docker-alpine/issues/30 提到:“这只是一个警告,不应该影响任何事情。”

https://github.com/gliderlabs/docker-alpine/issues/52 提到:“警告:ca-certificates.crt 不包含完全一个证书或 CRL:跳过就是它所说的,一个警告。它是说 ca-certificates.crt 不只包含一个证书(因为它是所有证书的串联),因此它被跳过并且不包含在 ca-certificates.crt 中(因为它不能包含自己)。”

“显示的警告是正常的。”

原文由 armyofda12mnkeys 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题