- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
- centos docker
- RaspberryPi
- API
- 리눅스
- Python
- 그라파나
- 쉘 스크립트 기초
- nginx
- 클라우드
- synology
- LEVIATHAN
- 자바
- 네트워크
- 프로젝트
- GPIO
- Linux
- 메소드
- Shell script
- 쉘 스크립트 if문
- System
- Tkinter
- docker
- JSP
- 라즈베리파이
- 쉘 스크립트
- GUI
- Android
- Java
- 안드로이드
- ACL
- Today
- Total
IT창고
Docker SSL / TLS 적용 본문
Docker Daemon에 SSL / TLS 적용에 대해 알아보도록 하겠습니다.
테스트 환경은 CentOS 7.9, RAM 1GB, Docker Engine CE Version 20.10.2 입니다.
도커 설치 방법은 아래의 링크에서 확인가능 합니다.
2021/01/28 - [서버운영/Virtualization] - Docker 설치 (CentOS)
도커 데몬에 적용시킬 인증서는 CentOS 7에 있는 OpenSSL를 통해 사설인증서를 만들어보도록 하겠습니다.
CA(Certificate Authority)파일부터 만들어 보도록 하겠습니다.
openssl genrsa -aes256 -out gsk-ca-key.pem 4096
위와 같이 파일 이름을 정하고 사용할 패스워드를 두 번 입력해주면 키 파일이 생성됩니다.
openssl req -new -x509 -days 365 -key gsk-ca-key.pem -sha256 -out ca.pem
키파일을 생성하였다면 위와 같이 ca파일을 생성하도록 합니다.
Common Name만 해당 테스트 서버의 호스트이름으로 작성하였으며 그 외에는 KR로 넘기도록 하겠습니다.
위와 같이 ca.pem 파일이 생성된걸 확인해 볼 수 있습니다.
ca.pem파일을 만들었다면 이젠 도커 서버용 인증서를 만들어 보도록 하겠습니다.
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=centgsk2" -sha256 -new -key server-key.pem -out server.csr
위와 같이 서버 키를 만들고 CSR(Certificate Signing Request) 파일을 만들도록 합니다.
DNS이름이 있을 경우 -subj 에 본인의 DNS 이름을 넣도록 합니다. 저는 테스트서버의 호스트이름인 centgsk2로 통일 시키도록 하겠습니다.
TLS 연결은 IP 주소와 DNS 이름을 통해 연결되므로 인증서를 생성 할 때 본인이 허용할 IP를 지정해야 합니다.
저의 경우는 위와 같이 127.0.0.1과 테스트 서버의 IP(100.100.100.3)를 지정하였으며 위의 과정은 서버 인증에만 사용할 수 있도록 Docker 데몬의 확장 사용 속성을 설정합니다.
(중요) 테스트 시 본인의 네트워크 대역에 맞는 IP 및 DNS 이름을 설정하도록 합니다.
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey gsk-ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
이제 마지막으로 서명된 인증서를 생성하도록 합니다.
위의 명령어를 입력하면 server-cert.pem 파일이 생성된걸 확인해 볼 수 있습니다. CA키 패스워드는 처음 CA파일을 생성 시 입력한 패스워드 입니다.
도커 서버용 인증서를 만들었으므로 도커 클라이언트를 위한 인증서를 만들어 보도록 하겠습니다.
openssl genrsa -out client-key.pem 4096
openssl req -subj '/CN=client' -new -key client-key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
과정은 서버키를 만들었던 과정과 비슷하며 위와 같이 클라이언트 인증에 적합한 새 확장 구성 파일을 추가로 생성합니다.
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey gsk-ca-key.pem -CAcreateserial -out client-cert.pem -extfile extfile-client.cnf
마찬가지로 서명된 인증서를 생성하도록 합니다.
CA키 패스워드까지 입력하면 client-cert.pem 파일이 생성된 걸 확인해 볼 수 있습니다.
사용할 인증서 파일 외에 필요없는 파일은 지웠으며 위의 파일들이 준비되었는지 마지막으로 확인합니다.
이제 필요한 인증서는 모두 만들었으므로 도커 서버에 인증서를 적용하도록 하겠습니다.
적용방법은 두 가지가 있는데 도커 데몬에 직접 설정하는 방법과 도커 구성 파일(daemon.json)에 설정하는 방법 입니다.
추천 방법인 도커 구성파일(daemon.json)에 설정해보도록 하겠습니다.
vi /etc/docker/daemon.json 명령어로 위와 같이 설정하도록 합니다 인증서 파일은 절대경로로 지정이 가능하며 절대경로를 사용하지 않을 경우 기본값 경로인 ~/.docker 디렉토리에 있는 인증서 파일이 지정 됩니다.
본격적인 테스트 진행을 위해 systemd 데몬의 docker 서비스 파일을 변경하지 않고 직접 docker 데몬을 실행 시켜 보았습니다.
도커 서버 쉘에서 dockerd -H=100.100.100.3:2376 명령어를 입력하면 에러나 오류 없이 도커 데몬이 실행됩니다.
테스트용이 아닌 상용 및 직접 사용하는 환경이라면 docker 서비스 파일에 직접 등록해두는 편이 좋습니다.
기본값 경로는 /usr/lib/systemd/system/docker.service 입니다.
테스트만 진행한다면 위와 같이 도커 데몬에 옵션만 넣어서 바로 실행 시키도록 합니다.
도커 구성 파일이나 도커 데몬에 직접 설정해서 도커 데몬에 TLS 적용을 시키며 혹시 모르니 아래에 도커 데몬에서 바로 TLS 적용 시키는 방법까지 작성해 두었습니다.
1. 데몬구성파일 작성
vi /etc/docker/daemon.json
{
"tlsverify": true,
"tlscacert": "/root/ca.pem",
"tlscert": "/root/server-cert.pem",
"tlskey": "/root/server-key.pem"
}
도커 데몬 실행
2. 도커 데몬에서 직접 TLS 적용
dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376
도커 엔진 20.10.2 버전에서는 api 통신이 막혀있으며 1.13.1 버전에서는 127.0.0.1로 열려있으므로 테스트를 위해 H옵션을 사용하여 소켓을 열어둡니다.
도커 서버에서 만들었던 클라이언트 인증서는 테스트할 다른 서버에 옮겨두도록 합니다. ex) lrzsz, ftp 등
클라이언트용 인증서는 ca.pem, client-cert.pem, client-key.pem 파일이며 타 서버의 테스트 서버 환경은 CentOS 7.9 RAM 1GB, Docker Engine CE Client Version 19.03.9 입니다.
위의 사진은 도커 클라이언트용 테스트 서버 정보입니다.
클라이언트 인증서 모두 준비되어있고 Docker Engine CE Client Version 19.03.9가 설치되어 있습니다.
Docker Remote API 통신 전 방화벽은 두 서버 모두 내려 두었습니다. ex) service firewalld stop
docker --tlsverify --tlscacert=/root/ca.pem --tlscert=/root/client-cert.pem --tlskey=/root/client-key.pem -H=100.100.100.3:2376 version
클라이언트 테스트 서버에서 위의 명령어를 입력하면 TLS 적용된 도커 서버(ip: 100.100.100.3)에서 위와 같이 응답을 해주게 됩니다. 예시로 도커 서버의 버전정보를 확인하였으며 도커 서버의 20.10.2 버전인걸 확인해 볼 수 있습니다.
클라이언트 테스트 서버에서도 인증서는 절대경로로 입력이 가능하며 기본값 경로는 도커 서버인증서와 동일하게 ~/.docker 디렉토리 입니다. 해당 디렉토리가 없을 경우 만들면 됩니다.
마지막으로 하나 더 테스트 해보도록 하겠습니다.
curl 명령어를 사용하여 도커 서버에 연결하면 클리이언트 인증서가 없을 경우 확인이 불가능 합니다.
클라이언트 인증서를 사용할 경우 정상적으로 도커 서버에서 현재 소유한 이미지 확인 가능합니다.
여기까지 Docker SSL / TLS 적용 및 테스트 였습니다.
주의사항으로 클라이언트 인증서가 있을 경우 TLS 적용된 도커 서버에 관리자와 같은 권한을 가지므로 클라이언트 인증서 관리는 주의해야 합니다.
'서버운영 > Virtualization' 카테고리의 다른 글
Docker 설치 (CentOS) (0) | 2021.01.28 |
---|---|
쿠버네티스(kubernetes) 설치하기 (CentOS 7) (2) | 2019.08.08 |
VMware ESXi 설치 및 활용 (0) | 2019.05.06 |
OpenStack 설치 (0) | 2019.02.24 |
docker 사용법2 및 활용 (0) | 2019.02.17 |