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을 패치하면 경고 없이 인증서 확인을 건너뛰지 않고 연결할 수 있습니다.

답변2

IMO는 이것이기 때문이다바쁜 상자 wgetAlpine Linux의 패치에는 ssl_clientHTTPS를 처리하는 외부 실행 파일이 필요합니다.https://gitlab.alpinelinux.org/alpine/aports/-/commit/1d0560a9b6b5597b191e5aff69a31c2fe0aba273

관련 정보