Alpine Linuxとカスタム認証局

Alpine Linuxとカスタム認証局

一部のAlpine LinuxコンテナにカスタムCAをインストールしようとしました。

まず公開鍵を追加して/usr/local/share/ca-certificatesから実行しますupdate-ca-certificates

$ ls -l /usr/local/share/ca-certificates/
total 4
-rw-r--r--    1 root     root          2029 Feb 20 18:39 my-custom-ca.crt
$ update-ca-certificates
...

$ ls -ltr /etc/ssl/certs | tail -3
-rw-r--r--    1 1000     root        233441 Feb 20 18:52 ca-certificates.crt
lrwxrwxrwx    1 1000     root            49 Feb 20 18:52 ca-cert-my-custom-ca.pem -> /usr/local/share/ca-certificates/my-custom-ca.crt
lrwxrwxrwx    1 1000     root            24 Feb 20 18:52 51252b35.0 -> ca-cert-my-custom-ca.pem

しかし、これは完全に動作しないようです。

もちろん、OpenSSLが証明書を信頼していることを確認できます。

$ openssl s_client -connect <my-server-crt-cn>:443 -showcerts 
CONNECTED(00000003)
depth=1 C = FR, ST = France, L = Paris, O = x, OU = y, CN = <my-ca-name>
verify return:1
depth=0 C = FR, ST = France, L = Paris, O = x, OU = y, CN = <my-server-crt-cn>
verify return:1
---
Certificate chain
 0 s:C = FR, ST = France, L = Paris, O = x, OU = y, CN = <my-server-crt-cn>
   i:C = FR, ST = France, L = Paris, O = x, OU = y, CN = <my-ca-name>
...

    Start Time: 1613847660
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no

しかし、wgetや私が実行したいRubyアプリなどの他のツールは気にしないようです。

$ wget https://<my-server-crt-cn>/
ssl_client: <my-server-crt-cn>: certificate verification failed: self signed certificate in certificate chain
wget: error getting response: Connection reset by peer

$ wget --no-check-certificate https://<my-server-crt-cn> -O-
Connecting to <my-server-crt-cn> (10.42.253.168:443)
writing to stdout
<response>
<returncode>SUCCESS</returncode>
<version>2.0</version>

次の画像を再現可能にすることができます。

FROM docker.io/alpine:3.11
RUN apk add --no-cache \
    ca-certificates \
    openssl
COPY my-ca.crt /usr/local/share/ca-certificates

私のワークステーション(Debian)でテストするときはまったく問題がなく、CAが信頼されているとtlsエラーを無視せずにwget / curlを使用できました。

私は何が間違っていましたか? wgetやRubyが私の証明書が自己署名されたと不平を言っているのはなぜですか?

ベストアンサー1

明らかに私の問題は、wgetがAplineに付属していることです。

デフォルトでは、Alpineはbusyboxのwgetに付属しています。

/ $ wget --version
wget: unrecognized option: version
BusyBox v1.31.1 () multi-call binary.

wgetとcaの証明書をインストールするためにDockerfileにパッチを適用すると、警告なしに証明書の確認をスキップせずに接続できます。

おすすめ記事