0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

証明書の拡張子はcrtにしましょう、という話

Last updated at Posted at 2024-12-16

サマリ

  • 会社の独自プロキシ証明書がcer拡張子で配布されていた
  • debian系のdocker imageをbuildするのにupdate-ca-certificatesコマンドがうまく動かなかった
  • mv sample.cer sample.crt したら動いた

環境

node:16を使っていた。debianのbusterがベース。

$ docker run --rm -it node:16 sh
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

背景

さまざまな情報源に、debianに独自証明書を追加する場合は、以下のどちらかのパスに証明書をおいて update-ca-certificates コマンドを叩きましょうと書いてある。

  • /usr/share/ca-certificates
  • /usr/local/share/ca-certificates

Dockerfile上で以下のようにどちらにも置いてみたが、curlが失敗した。

COPY sample.cer /usr/local/share/ca-certificates/
COPY sample.cer /usr/share/ca-certificates/
RUN update-ca-certificates

暫定対応1

今回はcurlで外部通信を行いたかったので、以下のように .curlrc に記載することでうまく動いた。

COPY sample.cer /usr/local/share/ca-certificates/
RUN echo "cacert=/usr/local/share/ca-certificates/sample.cer" > ~/.curlrc

暫定対応2

update-ca-certificates の実行結果としてファイルが移動されるらしいので、移動先に直接置いてみたうえで fresh オプションを付けることでも、動いた。

COPY sample.cer /etc/ssl/certs/
RUN update-ca-certificates --fresh

恒久対応

node:16 コンテナではmanコマンドが使えなかったため、直接 update-ca-certificates コマンドの中身を確認することにした。

$ docker run --rm -it node:16 sh
# command -v update-ca-certificates
/usr/sbin/update-ca-certificates
# cat /usr/sbin/update-ca-certificates

以下はコマンドの中身の抜粋だが、 "*.crt" を探しており、用意していた証明書 "*.cer" は対象外となっていることがわかる。

CERTSDIR=/usr/share/ca-certificates
LOCALCERTSDIR=/usr/local/share/ca-certificates

find -L "$CERTSDIR" -type f -name '*.crt' | sort | while read crt
find -L "$LOCALCERTSDIR" -type f -name '*.crt' | sort | while read crt

cerもcrtも中身は一緒らしいので、以下のように記載することでうまくいった。

COPY sample.cer /usr/local/share/ca-certificates/
RUN mv /usr/local/share/ca-certificates/sample.cer /usr/local/share/ca-certificates/sample.crt
RUN update-ca-certificates

感想

証明書の種別については以下を参考にさせていただいた。
https://qiita.com/kunichiko/items/12cbccaadcbf41c72735

"*.cer" はMicrosoftが定めた形式とのこと。より広く使われているcrtを使うべきだということがよくわかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?