Docker 레지스트리용 자체 서명 SSL 인증서 생성 방법

DockerBeginner
지금 연습하기

소개

Docker 레지스트리를 보안하는 것은 컨테이너 이미지의 무결성을 유지하고 Docker 기반 애플리케이션의 안전성을 확보하는 데 필수적입니다. 이 튜토리얼에서는 Docker 레지스트리용 자체 서명 SSL 인증서를 생성하는 과정을 안내하여 Docker 클라이언트와 레지스트리 간의 신뢰할 수 있는 연결을 설정합니다.

자체 서명 SSL 인증서 이해

SSL(Secure Sockets Layer) 인증서는 클라이언트와 서버 간의 안전한 연결을 설정하는 데 사용됩니다. 이는 두 당사자 간에 전송되는 데이터가 암호화되어 무단 접근으로부터 보호됨을 보장합니다. 자체 서명 SSL 인증서는 신뢰할 수 있는 인증 기관 (CA) 이 아닌 동일한 실체가 생성하고 서명하는 유형의 SSL 인증서입니다.

자체 서명 SSL 인증서는 개발 또는 테스트 환경에서 종종 사용됩니다. 여기서 CA 서명 인증서를 얻는 비용과 복잡성이 필요하지 않을 수 있습니다. 신뢰할 수 있는 CA 가 사용할 수 없거나 조직이 인증서 관리 프로세스에 대한 더 많은 제어권을 원하는 경우에도 사용할 수 있습니다.

그러나 웹 브라우저 및 기타 클라이언트는 기본적으로 자체 서명 SSL 인증서를 신뢰하지 않습니다. 클라이언트가 자체 서명 인증서를 만나면 일반적으로 인증서가 신뢰할 수 없다는 것을 나타내는 경고 메시지가 표시됩니다. 이는 안전한 연결에 의존하는 웹 애플리케이션 및 기타 서비스에 문제를 일으킬 수 있습니다.

프로덕션 환경에서 자체 서명 SSL 인증서를 사용하려면 애플리케이션 또는 서비스에 액세스할 모든 클라이언트가 인증서를 신뢰하도록 해야 합니다. 이는 자체 서명 인증서를 클라이언트에 배포하고 인증서를 신뢰하도록 구성하여 수행할 수 있습니다.

Docker 레지스트리의 맥락에서 자체 서명 SSL 인증서를 사용하는 것은 특히 조직 내에서 개인 레지스트리를 실행하는 경우 실용적인 해결책이 될 수 있습니다. 자체 서명 인증서를 생성하고 Docker 가 이를 사용하도록 구성하면 신뢰할 수 있는 CA 서명 인증서가 필요하지 않고 Docker 클라이언트와 레지스트리 간의 통신이 안전하게 보장됩니다.

Docker 레지스트리용 자체 서명 SSL 인증서 생성

필수 사항

자체 서명 SSL 인증서를 생성하기 전에 다음 필수 사항을 확인하십시오.

  • Linux 기반 시스템 (이 예제에서는 Ubuntu 22.04 사용)
  • OpenSSL 설치 (대부분의 Linux 배포판에 미리 설치되어 있음)

자체 서명 SSL 인증서 생성 단계

  1. Ubuntu 22.04 시스템의 터미널을 엽니다.

  2. SSL 인증서를 위한 개인 키를 생성합니다.

openssl genrsa -out registry.key 2048
  1. 개인 키를 사용하여 자체 서명 SSL 인증서를 생성합니다.
openssl req -new -x509 -key registry.key -out registry.crt -days 365

이 명령은 인증서에 대한 다양한 세부 정보 (예: 일반 이름 (CN)) 를 입력하도록 요청합니다. CN 은 Docker 레지스트리의 호스트 이름 또는 IP 주소와 일치해야 합니다.

  1. 생성된 인증서를 확인합니다.
openssl x509 -in registry.crt -text -noout

이렇게 하면 생성된 자체 서명 SSL 인증서의 세부 정보가 표시됩니다.

  1. (선택 사항) Docker 레지스트리에 사용자 정의 도메인 이름을 사용하려면 Docker 클라이언트가 실행될 시스템의 /etc/hosts 파일을 업데이트하여 도메인 이름을 Docker 레지스트리의 IP 주소로 매핑할 수 있습니다.
graph LR
  A[개인 키 생성] --> B[자체 서명 SSL 인증서 생성]
  B --> C[인증서 확인]
  C --> D[`/etc/hosts` 업데이트 (선택 사항)]

이러한 단계를 따르면 Docker 레지스트리를 보호하는 데 사용할 수 있는 자체 서명 SSL 인증서가 생성됩니다. 다음 단계는 Docker 가 이 자체 서명 인증서를 사용하도록 구성하는 것입니다.

자체 서명 인증서를 사용하도록 Docker 구성

자체 서명 인증서를 Docker 호스트로 복사

  1. 이전 단계에서 생성된 registry.crt 파일을 Docker 호스트로 복사합니다. 파일 전송 도구 또는 scp 명령어를 사용하여 파일을 복사할 수 있습니다.
scp registry.crt user@docker-host:/etc/docker/certs.d/myregistry.example.com/ca.crt

user@docker-host를 Docker 호스트의 사용자 이름과 호스트 이름 또는 IP 주소로, myregistry.example.com를 Docker 레지스트리의 호스트 이름 또는 IP 주소로 바꿔주세요.

자체 서명 인증서를 사용하도록 Docker 구성

  1. Docker 호스트에서 자체 서명 인증서를 위한 디렉터리를 만듭니다.
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com
  1. registry.crt 파일을 새로 만든 디렉터리로 복사합니다.
sudo cp registry.crt /etc/docker/certs.d/myregistry.example.com/ca.crt
  1. 변경 사항을 적용하려면 Docker 데몬을 다시 시작합니다.
sudo systemctl restart docker

구성 확인

  1. Docker 클라이언트를 사용하여 Docker 레지스트리에서 이미지를 가져오려고 시도합니다.
docker pull myregistry.example.com/my-image:latest

구성이 올바르면 Docker 클라이언트는 SSL/TLS 관련 오류 없이 레지스트리에 연결할 수 있어야 합니다.

graph LR
  A[Docker 호스트로 인증서 복사] --> B[인증서 디렉터리 생성]
  B --> C[디렉터리로 인증서 복사]
  C --> D[Docker 데몬 다시 시작]
  D --> E[구성 확인]

이러한 단계를 따르면 Docker 레지스트리에 대한 자체 서명 SSL 인증서를 사용하도록 Docker 가 구성됩니다. 이렇게 하면 인증서가 신뢰할 수 있는 인증 기관에서 서명되지 않았더라도 Docker 클라이언트와 레지스트리 간의 통신이 안전하게 보장됩니다.

요약

이 튜토리얼에 설명된 단계들을 따르면 Docker 레지스트리에 대한 자체 서명 SSL 인증서를 생성하고, Docker 가 이 인증서를 사용하도록 구성하며, Docker 클라이언트와 레지스트리 간의 안전한 통신을 보장할 수 있습니다. 이를 통해 Docker 기반 인프라의 보안을 강화하고 전체 Docker 배포 프로세스를 효율화하는 데 도움이 될 것입니다.