본문 바로가기
AWS/ACM

AWS ACM에 사설 인증서(자체 서명된 인증서, Self-signed Certificate) 등록하기

by 내꿈은한량 2022. 7. 14.
ACM: AWS Certificate Manager

개요

이 문서에서는 ACM에서 제공하는 사설 인증 기관을 통해 사설 인증서를 만들지 않고, 직접 만든 사설 인증서를 ACM에 등록하여 사용하는 방법에 대해 설명합니다.

(참고로, ACM에서 직접 사설 인증서를 만들려면 먼저 사설 인증 기관을 생성해야 하는데 가격이 월 400 USD 이기 때문에 특수한 경우를 제외하고는 사용하지 않을 것 같습니다.)

언제 쓰는가?

보통 다음의 목적으로 사설 인증서를 사용하는 경우가 많습니다.

  • 개발 프로젝트 초기에 도메인은 확정되지 않았지만, 도메인 기반 테스트가 필요한 경우
  • 사용자에게 노출되지는 않는 시스템이지만, 보안을 위해 시스템간 SSL 기반 통신을 적용하고 싶은 경우.

이런 상황에서 AWS 기반 Cloud 시스템에서는 사설 인증서와 ELB 를 연결하는 방법에 대해 정리했습니다.

절차

1. Private Key(my-aws-private-key.pem)와 인증서(my-aws-private-cert.pem) 생성

$ openssl req -x509 -nodes -newkey rsa:4096 -keyout my-aws-private-key.pem -out my-aws-private-cert.pem -days 3650
Generating a 4096 bit RSA private key
.............++
..........................................................................++
writing new private key to 'my-aws-private-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) []:MegazoneCloud
Organizational Unit Name (eg, section) []:STC
Common Name (eg, fully qualified host name) []:*.yulisys-vpn.com
Email Address []:yulisys@megazone.com

“openssl …” 명령어의 옵션은 다음과 같습니다.

옵션 설명
req PKCS#10 형식의 인증서 요청을 만들고 처리하는 명령어. 자체 서명된 인증서를 만들때 사용.
-newkey args 새로운 인증서 요청과 새로운 private key를 생성.
args 파라메터의 rsa:4096 은 4096 크기의 RSA 키를 생성한다는 의미
-x509 인증서 요청 대신 자체 서명된 인증서 출력
-nodes Private Key를 암호화하지 않음
-days n 인증서의 유효 기간 설정. 일단위. -x509 옵션을 지정할 때 사용.
-keyout file 생성할 Private Key 파일명
-out file 생성할 인증서 파일명

명령어 실행후 입력해야 하는 항목은 다음과 같습니다.

-----
Country Name (2 letter code) []:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) []:MegazoneCloud
Organizational Unit Name (eg, section) []:STC
Common Name (eg, fully qualified host name) []:*.yulisys-vpn.com
Email Address []:yulisys@megazone.com
 
항목 설명
Country Name (2 letter code) 국가 코드 (KR → 한국)
State or Province Name 시/도 이름
Locality Name (eg, city) 도시 이름
Organization Name (eg, company) 조직 이름. 주로 회사이름을 입력
Organizational Unit Name (eg, section) 부서 이름
Common Name (eg, fully qualified host name) 도메인 이름.
 
www.abc.com 또는 abc.com 등으로 입력할 수 있지만, 서브도메인등을 사용하려면 *.abc.com 와 같은 와일드카드 도메인을 입력해야 합니다.
Email Address 인증서 발급 담당자 메일 주소.

3. 생성한 Private Key 파일과 인증서 파일을 base64 로 인코딩합니다.

$ base64 -i my-aws-private-key.pem -o my-aws-private-key.pem.b64 && base64 -i my-aws-private-cert.pem -o my-aws-private-cert.pem.b64

4. 생성된 base64로 인코딩된 Private Key와 인증서 파일을 AWS CLI를 이용해 ACM에 등록합니다.

$ aws acm import-certificate --certificate "file://my-aws-private-cert.pem.b64" --private-key "file://my-aws-private-key.pem.b64"
{
    "CertificateArn": "arn:aws:acm:ap-northeast-2:12345xxxxxxx:certificate/647bxxxx-xxxx-xxxx-9bcc-e90c8xxxxxxx"
}

5. AWS 웹 콘솔의 ACM 에서 등록한 사설 인증서 확인해 봅니다.

 

활용

등록된 사설 인증서는 공인 인증서와 마찬가지로 ELB 등에서 사용가능합니다.
아래는 ELB의 리스너 추가시 이전에 등록한 사설 인증서를 선택하는 화면입니다.

 

설정은 완료되더라도 인증서에 설정한 도메인인 “*.yulisys-vpn.com" 은 존재하지 않기 때문에 브라우저로 호출은 당연히 안됩니다. hosts 파일에 ELB의 아이피를 해당 도메인에 매핑하여 접근을 해도 아래와 같이 사용할 수는 없습니다.

 

참고로, 사설 인증서를 운영체제에 직접 신뢰하는 인증서로 등록하였다면, 오류 메세지가 출력은 되지만, 사용은 가능하게 됩니다.

Mac의 키체인에 사설 인증서를 등록하고 인증서를 “항상 신뢰”로 설정. 세부사항에서는 인증서 생성시에 입력한 다양한 내용들을 확인할 수 있습니다.

 
이전과는 다르게 안전하지는 않지만 이동이 가능한 옵션이 보여집니다.
 

 
사설 인증서를 통해 내용을 확인할 수 있습니다.