Ubuntu(20.04)에 새 CA 인증서를 추가하는 프로세스를 진행했지만 두 환경 모두의 Debian(10)에서 동일한 단계가 작동하지 않습니다. 사용자 정의 CA 인증서를 다운로드했습니다( about:certificate
firefox 페이지를 통해 인증서를 가져오면 신뢰할 수 있는 인증서가 작동하지 않습니다). Site)를 PEM으로 저장한 다음 openssl을 사용하여 CRT 형식으로 변환한 다음 update-ca-certificates
.
다음 단계는 다음과 같습니다 Dockerfile
.
FROM ubuntu:20.04
RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y curl openssl ca-certificates
COPY src/main/docker/nexus-custom-ca-chain.pem /root/
RUN openssl x509 -in /root/nexus-custom-ca-chain.pem -inform PEM -out /usr/local/share/ca-certificates/custom-root-ca.crt
RUN update-ca-certificates
RUN curl https://nexus-using-custom-cert.custom.org
이 Dockerfile 빌드
docker build . --no-cache
출력됩니다:
Step 1/6 : FROM ubuntu:20.04
---> 9140108b62dc
Step 2/6 : RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y curl openssl ca-certificates
---> Running in 2fd506a9b619
[install stuff]
Processing triggers for ca-certificates (20190110ubuntu1.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Removing intermediate container 2fd506a9b619
---> 57c01aa6180d
Step 3/6 : COPY src/main/docker/nexus-custom-ca-chain.pem /root/
---> e0aa6a44ced1
Step 4/6 : RUN openssl x509 -in /root/nexus-custom-ca-chain.pem -inform PEM -out /usr/local/share/ca-certificates/custom-root-ca.crt
---> Running in 70746b6e16fe
Removing intermediate container 70746b6e16fe
---> de9c98488bde
Step 5/6 : RUN update-ca-certificates
---> Running in 1137779ed67f
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Removing intermediate container 1137779ed67f
---> c834167a52a3
Step 6/6 : RUN curl https://nexus-using-custom-cert.custom.org
---> Running in a8dc2aa55993
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0<html>
<body> stuff
</body>
</html>
100 470 100 470 0 0 1492 0 --:--:-- --:--:-- --:--:-- 1487
Removing intermediate container a8dc2aa55993
---> 809e4e5b6ac1
Successfully built 809e4e5b6ac1
그러나 대신 사용하는 경우 debian:10
(다른 변경 사항 없음 Dockerfile
):
FROM debian:10
그런 다음 Docker 이미지를 다시 빌드합니다.
이 Dockerfile 빌드
docker build . --no-cache
출력됩니다:
Step 1/6 : FROM debian:10
---> f6dcff9b59af
Step 2/6 : RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y curl openssl ca-certificates
---> Running in 15d0c69448ed
[install stuff]
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for ca-certificates (20200601~deb10u1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Removing intermediate container 15d0c69448ed
---> 4bcfe8b5074b
Step 3/6 : COPY src/main/docker/nexus-custom-ca-chain.pem /root/
---> fa53734a536a
Step 4/6 : RUN openssl x509 -in /root/nexus-custom-ca-chain.pem -inform PEM -out /usr/local/share/ca-certificates/custom-root-ca.crt
---> Running in b86813e50a77
Removing intermediate container b86813e50a77
---> 0b0e6aa67d7d
Step 5/6 : RUN update-ca-certificates
---> Running in c18625c31424
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Removing intermediate container c18625c31424
---> 559636874009
Step 6/6 : RUN curl https://nexus-using-custom-cert.custom.org
---> Running in fcd2e16441fd
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.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.
The command '/bin/sh -c curl https://nexus-using-custom-cert.custom.org' returned a non-zero code: 60
그렇다면 사용자 정의 CA 인증서를 어떻게 추가해야 합니까 Debian 10
? 데비안 update-ca-certificates
문서는 Ubuntu
문서와 매우 유사합니다. 무엇이 잘못되었나요?
미리 감사드립니다!
답변1
내 동료 @BrettDG 덕분에 데비안에서도 작동하도록 할 수 있었습니다.
총 길이 DR: 신뢰 체인의 모든 인증서를 개별적으로 포함해야 합니다. Ubuntu는 중간 인증서만 충족하고 Debian은 전체 체인이 필요합니다.
내가 연결하려는 웹사이트에는 다음과 같은 신뢰 체인이 있습니다.
MyOrgRootCA
|-> MyOrgIntermediateCA
|-> Website
nexus-custom-ca-chain.pem
내 PEM 파일에 완전한 체인이 있다고 생각되면 다음을 실행합니다.
openssl x509 -in /usr/local/share/ca-certificates/nexus-custom-ca-chain.pem -noout -text
결국 해당 체인에는 사이트 인증서와 중개 인증서만 있다고 표시됩니다. 따라서 루트 인증서가 손실되었습니다.
또한 하나의 파일에 여러 인증서를 갖는 것이 좋은 생각인지 확실하지 않습니다. 개별적으로 자체 파일로 분할해 보십시오.
Debian 및 Ubuntu용 Dockerfile은 다음과 같습니다.
# FROM ubuntu:20:04
FROM debian:10
RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y curl openssl ca-certificates
COPY root.pem /usr/local/share/ca-certificates/root.pem
COPY intermediate.pem /usr/local/share/ca-certificates/intermediate.pem
RUN chmod 644 /usr/local/share/ca-certificates/root.pem /usr/local/share/ca-certificates/intermediate.pem
RUN update-ca-certificates
RUN curl https://nexus-using-custom-cert.custom.org
배운 지식: 신뢰 체인을 검증하고 체인의 각 인증서를 제공합니다.
체인의 각 인증서에서 출력을 실행 openssl x509 -noout
하고 다음을 찾습니다.
MyOrgRootCA
Issuer: C = CA, ST = Quebec, L = Montreal, O = Org, OU = tools, CN = Org ROOT CA
Subject: C = CA, ST = Quebec, L = Montreal, O = Org, OU = tools, CN = Org ROOT CA
MyOrgIntermediateCA
Issuer: C = CA, ST = Quebec, L = Montreal, O = Org, OU = tools, CN = Org ROOT CA
Subject: C = CA, ST = Quebec, L = Montreal, O = Org, OU = tools, CN = Intermediate ROOT CA
거기에서 우리 curl -v
웹사이트에 다음이 표시된다면:
issuer: C = CA, ST = Quebec, L = Montreal, O = Org, OU = tools, CN = Intermediate ROOT CA
우리는 중간 및 루트 인증서를 제공하는 것이 가장 좋다는 것을 알고 있습니다.
유용한 명령줄
인증서를 자세히 확인하세요.
openssl x509 -in mycert.crt -noout -text
바이너리(DER) 형식에서 x509 PEM으로 변환(필요한 경우 update-ca-certificates
)
openssl x509 -in mycert.crt -inform der -outform PEM -out mycert.crt
텍스트(PEM) 형식에서 바이너리로 변환(Java Keytool의 요구에 따라)
openssl x509 -in mycert.pem -outform der -out mycert.der