web-dev-qa-db-ja.com

Alpine Linuxコンテナーに証明書を追加できません

私は小さなpythonアプリをAlpine Linuxコンテナ内に持っています。ここに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ファイルに証明書のチェーンが含まれていることがわかりました。私は this をスタックオーバーフローで見つけました:

/etc/ssl/certs/ca-certificates.crtは、実際には/ usr/local/share/ca-certificatesから個々の証明書を追加しています。

何が変わったの?なぜこれが問題になるのですか?だから私は古いバージョンのAlpine Linuxに戻そうとした-同じ問題。証明書を再作成してみました。コンテナから証明書の束全体を削除してみました。更新前にpemファイルをチェックして、証明書が1つだけであることを確認しました。

RUN update-ca-certificates

多くの証明書が表示されます。助けて ?

4
Gil Zellner

私は以下がうまくいったと思います(私は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

次に、VM=にログインし、マージされた証明書ファイル/etc/ssl/certs/ca-certificates.crtに追加されていることを確認します(各証明書ファイルを/ usr/local/share/ca-certificates内にあり、/ etc/ssl/certs/ca-certificates.crtファイルにマージされます)。

これで、「証明書またはCRLが1つだけ含まれていない:スキップする」というエラーが表示されますが、問題ないと思います。

https://github.com/gliderlabs/docker-Alpine/issues/ 言及:「これは単なる警告であり、何にも影響を与えてはならない」

https://github.com/gliderlabs/docker-Alpine/issues/52 言及:「警告:ca-certificates.crtに正確に1つの証明書またはCRLが含まれていません:スキップはそれだけですこれは警告です。ca-certificates.crtには証明書が1つしか含まれていない(すべての証明書が連結されているため)ため、この証明書はスキップされ、ca-certificates.crtに含まれていません(このため、自体を含めることはできません)。」
「表示された警告は正常です。」

3