개발 환경에서 HTTPS를 테스트하거나, 로컬 서버에 보안을 적용하려면 인증서를 생성하여 Docker 컨테이너에 적용해야 하는 경우가 있습니다. 이 글에서는 OpenSSL을 활용하여 로컬 환경에서 사용할 HTTPS 인증서를 생성하고, Docker 컨테이너에 적용하는 방법을 단계별로 설명합니다.
1. HTTPS 인증서 생성 준비
HTTPS를 적용하려면 SSL 인증서와 개인 키 파일이 필요합니다. 이를 위해 OpenSSL 명령어를 사용하여 로컬에서 인증서를 생성합니다.
2. OpenSSL을 활용한 인증서 생성
2-1. 개인 키 생성
먼저 개인 키 파일(key.pem)을 생성합니다. 이 키 파일은 SSL/TLS 암호화에서 중요한 역할을 하며, 반드시 안전하게 보관해야 합니다.
openssl genrsa -out key.pem 2048
위 명령어는 RSA 알고리즘을 사용하여 2048비트 길이의 개인 키를 생성합니다. 생성된 key.pem 파일은 이후 인증서 요청 및 서명 과정에서 사용됩니다.
2-2. 인증서 서명 요청(CSR) 생성
CSR(Certificate Signing Request)은 인증서를 발급받기 위해 필요한 정보를 담고 있는 요청 파일입니다.
openssl req -new -key key.pem -out csr.pem
위 명령어를 실행하면 몇 가지 질문이 표시됩니다. 아래는 주요 입력 항목입니다:
- Country Name: 국가 코드(예: 대한민국은 KR)
- Common Name: 인증서를 사용할 도메인(예: local-service.test.co.kr)
주의: Common Name은 도메인과 정확히 일치해야 합니다. 로컬 환경에서는 테스트용 도메인을 지정하세요.
2-3. 인증서 생성
CSR 파일을 사용하여 SSL 인증서를 생성합니다. 인증서는 1년(365일) 동안 유효하도록 설정됩니다.
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem
- csr.pem: 인증서 서명 요청 파일
- key.pem: 개인 키 파일
- cert.pem: 최종 생성된 인증서 파일
이 과정에서 key.pem을 사용하여 CSR을 자체 서명(self-signing)하여 로컬에서 사용할 인증서를 만듭니다.
3. 인증서 등록 및 Docker 적용
생성된 key.pem(개인 키)과 cert.pem(인증서 파일)을 Docker 컨테이너 또는 로컬 서버에 적용합니다.
3-1. 인증서 파일 구조 정리
Docker에서 인증서를 사용할 수 있도록 파일을 정리합니다:
/certs/
├── key.pem # 개인 키
├── cert.pem # 인증서
3-2. Docker Compose 설정 예제
Docker Compose를 사용하는 경우, 아래와 같이 인증서 파일을 마운트하여 Nginx 컨테이너에 적용할 수 있습니다.
services:
web:
image: nginx:latest
volumes:
- ./certs:/etc/nginx/certs
ports:
- "443:443"
command: >
sh -c "nginx -g 'daemon off;'"
/etc/nginx/certs 경로에 인증서를 마운트한 뒤, Nginx 설정 파일에서 이를 참조합니다.
3-3. Nginx HTTPS 설정
Nginx 설정 파일(nginx.conf)에서 SSL을 활성화합니다:
server {
listen 443 ssl;
server_name local-service.test.co.kr;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
4. 로컬 환경 테스트
127.0.0.1 local-service.test.co.kr
- hosts 파일에 도메인을 등록하여 로컬 환경에서 도메인 이름을 인식하도록 설정합니다.
- 브라우저에서 https://local-service.test.co.kr에 접속하여 HTTPS가 적용되었는지 확인합니다.
5. 결론
이 과정을 통해 로컬 Docker 환경에서도 HTTPS를 쉽게 적용할 수 있습니다. OpenSSL을 활용하여 직접 인증서를 생성하고, 이를 Docker 및 Nginx에 통합하면 테스트와 개발에서 HTTPS 환경을 시뮬레이션할 수 있습니다. 서비스 개발 초기 단계에서 HTTPS를 적용하면 보안 문제를 조기에 발견할 수 있어 실서비스 배포 시 더 안전한 환경을 제공할 수 있습니다.