🖱️
コンテナに自己署名CA証明書をインポートする
何がしたいのか
セキュリティのためにインターネットへの通信経路をNGFWやIPSの一箇所に集約し、HTTPSも復号した上で通信内容をスキャンしてマルウェアによる通信をブロックしたり、不正な情報の持ち出しをブロックするといった構成がエンタープライズ環境では有り得るかと思います。
そのような環境においてはサーバはもちろん、コンテナについても、ブリッジとなるNGFWやIPSが発行した自己署名証明書を信頼させるために自己署名のCA証明書をインポートする必要があります。
コンテナ(Linux)について、AmazonLinux2023のイメージにてインポート方法を確認しました。
RHEL系では以下の手順でOKです。[1]
- /etc/pki/ca-trust/source/anchors/ にCA証明書をコピー
-
update-ca-trust
を実行してインポートする
検証記録
前提事項
-
./test-certs/ca_certificate.pem
に自己署名CA証明書を配置しています。 - Macで確認しており、確認時のMacのIPアドレスは
192.168.1.100
です。 - テスト用のWebサーバには、Macの別コンテナでnginxが起動しており、上記のCAで署名したサーバ証明書を配置しています(www.example.comとします)
なお、自己署名CAとサーバ証明書の作成は以下のスクリプトにて実施しています。
手順記録
コンテナを起動します
% docker run -v $(pwd)/test-certs:/test-certs --rm -it amazonlinux:2023 bash
hostsにWebサーバのエントリを追加し、curlでHTTPSアクセスします。
bash-5.2# echo "192.168.1.100 www.example.com" >> /etc/hosts
bash-5.2#
bash-5.2# curl https://www.example.com/
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
bash-5.2#
インポート前なので、証明書の検証に失敗しています。
自己署名CA証明書をインポートします。
bash-5.2# cp /test/ca_certificate.pem /etc/pki/ca-trust/source/anchors/
bash-5.2# update-ca-trust
bash-5.2#
再度curlでHTTPSアクセスしてみます。
bash-5.2# curl https://www.example.com/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
bash-5.2#
エラーなくサーバ証明書の検証に成功しました。
Discussion