Post

[Docker] Ubuntu CA 인증서를 수동으로 구성하는 방법

네트워크가 되지 않는 환경에서 인증서를 수동으로 등록하는 방법을 알아보겠습니다.

개요

네트워크가 차단된 환경에서 update-ca-certificates를 설치하지 못하여 CA 인증서를 수동으로 구성해야 하는 경우에 대해 알아보겠습니다.

시나리오

  • 문제 상황:
    • 내부 네트워크에서만 운영되는 환경에서 Docker 이미지를 생성해야 하며, 외부 리소스에 접근할 수 없는 경우
    • 특정 CA 인증서가 필요하지만, 인터넷에 연결되어 있지 않아 apt-get update와 같은 명령어를 사용할 수 없는 경우
    • 외부 서버의 SSL/TLS 인증을 안전하게 수행하기 위해 필요한 CA 인증서를 수동으로 등록해야 하는 경우
  • 해결 방법:
    • Dockerfile을 사용하여 인증서를 직접 복사하고 등록하여 SSL/TLS 연결을 안전하게 수행할 수 있도록 합니다.

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
FROM ubuntu:20.04

USER root

# Copy sources.list to use internal mirror
COPY ./sources.list /etc/apt/sources.list

# Copy the .crt files to the image
COPY ./CA1.crt /usr/local/share/ca-certificates/
COPY ./CA2.crt /usr/local/share/ca-certificates/
COPY ./CA3.crt /usr/local/share/ca-certificates/

# Ensure that the /etc/ssl/certs directory exists
RUN mkdir -p /etc/ssl/certs

# Register certificates manually without update-ca-certificates
RUN cat /usr/local/share/ca-certificates/*.crt > /etc/ssl/certs/ca-certificates.crt

# (Optional) Set environment variables to use custom CA certificates
# ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

# Update Package List via Internal Mirror Server
RUN apt-get update

# Start with bash shell
CMD ["bash"]

각 명령어 설명

  • FROM ubuntu:20.04
    • Docker 컨테이너의 기본 이미지를 Ubuntu 20.04로 설정합니다.
  • USER root
    • 시스템 파일을 수정할 수 있는 관리 권한이 필요한 root 사용자로 전환합니다.
  • COPY ./sources.list /etc/apt/sources.list
    • 사용자 정의 sources.list 파일을 Docker 이미지에 복사하여 패키지 관리에 사용할 내부 미러를 설정합니다.
  • COPY ./CA1.crt /usr/local/share/ca-certificates/ , COPY ...
    • CA 인증서 파일을 지정된 디렉토리에 복사하여 인증서를 등록할 수 있도록 합니다.
  • RUN mkdir -p /etc/ssl/certs
    • /etc/ssl/certs 디렉토리가 존재하지 않을 경우 생성하여, 병합된 인증서 파일을 저장할 위치를 만듭니다.
  • RUN cat /usr/local/share/ca-certificates/*.crt > /etc/ssl/certs/ca-certificates.crt
    • 복사된 모든 .crt 파일을 하나의 ca-certificates.crt 파일로 병합하여 /etc/ssl/certs 디렉토리에 등록합니다. SSL/TLS 응용 프로그램에서 사용할 수 있도록 인증서를 등록합니다.
  • ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
    • (선택 사항) 사용자 정의 CA 인증서를 위한 환경 변수를 설정합니다. 그러나 대부분의 응용 프로그램에서 작동하는 데 필수는 아닙니다.
  • RUN apt-get update
    • 내부 미러에서 패키지 목록을 업데이트합니다. 이 명령은 sources.list에 설정된 내부 미러가 올바르게 구성되어 있어야 성공합니다.

중요 고려사항

  • 파일 이름: CA 인증서는 /etc/ssl/certs/ca-certificates.crt에 등록됩니다. 이 이름은 많은 응용 프로그램이 SSL/TLS 작업을 위해 인증서 파일을 이 이름으로 찾기 때문에 중요합니다.
  • 네트워킹: 이 설정은 네트워크가 차단된 환경에서 작동하도록 설계되었으며, apt-get update는 내부 미러에 접근할 수 있어야 성공합니다.

이미지 빌드

1
docker build --no-cache --progress=plain -f dockerfile -t CAmanually .
This post is licensed under CC BY 4.0 by the author.