회사망에서 docker pull 을 하다 보면 아래와 같은 에러를 만날 수 있다.

docker: error pulling image configuration: download failed after attempts=6: tls: failed to verify certificate: x509: certificate signed by unknown authority

문제 발생의 이유

회사망에서는 보통 외부와 직접 통신하지 않고, 보안 게이트웨이(Proxy, SSL Inspection 장비) 를 통해 인터넷에 접근합니다.
이 장비는 TLS 트래픽을 중간에서 끊고(복호화) 다시 재암호화 하여 전달한다.

원래라면 docker pull 시 Docker Hub(docker.io) 서버에서 발급한 공인 CA 인증서를 받아야 한다.
하지만 회사망에서는 게이트웨이가 대신 TLS를 맺고, 회사 내부 CA로 서명된 인증서를 클라이언트(Docker)에게 전달한다.

결과적으로 Docker는
“내가 기대한 건 Docker Hub가 DigiCert(공인 CA)로 서명한 인증서인데,
지금 보니 알 수 없는 회사 CA가 서명했네? → 신뢰할 수 없음!”

“내가 기대한 건 Docker Hub가 DigiCert(공인 CA)로 서명한 인증서인데,
지금 보니 알 수 없는 회사 CA가 서명했네? → 신뢰할 수 없음!”

 

그래서 x509: certificate signed by unknown authority 오류가 발생


해결방법: 회사의 CA를 신뢰목록에 추가

시스템 전역 CA에 추가

리눅스에서 시스템 전체가 신뢰하는 CA 목록에 회사 CA 인증서를 넣는다.

sudo cp company-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

이제 curl, wget, apt 등 OS 도구들은 회사 CA를 신뢰하게 된다.
하지만 Docker는 별도의 저장소를 사용하므로, 이것만으로는 충분하지 않다.

 

 


Docker 전용 CA 디렉토리에 추가

Docker는 /etc/docker/certs.d/<레지스트리주소>:<포트>/ca.crt 경로를 확인한다.
따라서 회사 CA를 해당 위치에 직접 복사해야 한다.

sudo mkdir -p /etc/docker/certs.d/registry-1.docker.io
sudo cp company-ca.crt /etc/docker/certs.d/registry-1.docker.io/ca.crt

 

그 후 Docker를 재시작한다.

sudo systemctl daemon-reload
sudo systemctl restart docker

+ Recent posts