Harbor 등 Secure Mode를 요구하는 시스템의 경우 공인인증서로 관리하려면 매년 업데이트 해야 하는 불편함이 있습니다. 이럴때는 사설로 10년짜리를 발급하고 CA루트 인증서를 설치해 Secure 통신하는 것도 좋은 방법이다.
아래는 CA인증서를 생성하고 서버인증서에 서명까지 하는 프로세스이다.
참고로 여기에 빠진부분은, 각 서버(혹은 클라이언트)에 Keystore 를 만들어주고, CA에 대한 체인을 등록해야 한다는 점이다. 그건 제 브로그의 kafka 보안에서 다루므로 참고
우선 인증서 디렉토리를 생성합니다.
$ sudo cd /app/harbor
$ sudo mkdir certs
$ sudo cd ./certs
CA Certificates 생성
실제 RootCA (신뢰할 수 있는 루트 인증 기관)를 사용하는게 아니라면, 직접 CA (인증 기관)를 생성하여 Server의 인증서가 안전하다고 인증해주어야 합니다. 따라서 아래의 명령어로 개인용 Root CA 역할을 할 CA.key를 생성하고, CA.key의 짝이 되는 CA.crt 공개키를 생성합니다.
Root CA의 비밀키 생성
$ sudo openssl genrsa -out ca.key 4096
Root CA의 비밀키와 짝을 이룰 공개키 생성
$ sudo openssl req -x509 -new -nodes -sha512 -days 3650 \
-key ca.key \
-out ca.crt
Server Certificates 생성
이번에는 서버의 인증서를 생성합니다. Root CA의 비밀키와 공개키를 만들 때와 마찬가지로 서버의 비밀키를 생성하고, 생성한 비밀키를 넣어 CSR 파일을 생성합니다. CSR 파일은 Certificate Signing Request 파일로, 인증서를 발급하기 위해 필요한 정보를 담고 있는 데이터입니다. CSR 파일은 SSL 발급을 신청하기 위해 해당 파일 내용을 Root CA에 제출하는 용도로 사용하게 됩니다.
Server의 비밀키 생성
$ sudo openssl genrsa -out server.key 4096
Server의 CSR(서명요청) 생성
$ sudo openssl req -sha512 -new \
-key server.key \
-out server.csr
CSR에 대해 서명(CA가 서버인증서에 서명함)
이제 위에서 생성한 서버의 CSR 파일을, 직접 만든 Root CA에 인증해달라고 요청하는 작업을 수행합니다. CSR 파일을 가지고 서버의 인증키를 생성하게 됩니다.
$ sudo openssl x509 -req -sha512 -days 3650 \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.csr \
-out server.crt
※ (Harbor에만 해당) Docker에서는 .crt 파일을 CA (인증 기관)의 인증서라고 간주합니다.
서버의 인증서라는 것을 표현하고 싶다면 .crt 형식이 아닌 .cert 형식으로 변환해주어야 합니다. 따라서 server.crt 파일을 server.cert 파일로 변환합니다.
$ sudo openssl x509 -inform PEM -in server.crt -out server.cert
위 과정으로 생성된 인증서 중 ca.crt를 적용하면 CA 루트인증기관을 신뢰하겠다는 의미이고,
harbor, nginx 등과 같은 어플리케이션에는 server.crt를 적용하면 됩니다.
'PaaS > 기타' 카테고리의 다른 글
NGINX 와 Apache 비교 (0) | 2022.06.13 |
---|---|
(Redmine) Docker로 Redmine 설치 (0) | 2021.10.15 |
YAML 문법 (0) | 2021.06.03 |
Apache SSL 적용 (Centos) (0) | 2021.05.12 |
Apache 웹서버 Weblogic으로 포워딩 설정(Centos) (0) | 2021.05.12 |