AWS ACM 와일드카드 인증서, 왜 루트 도메인에서만 "주의요함"이 뜰까
시스템을 AWS에 배포하고 나서, 마지막으로 사이트에 접속해봤습니다. 배포 끝나고 주소창에 자물쇠 아이콘 뜨는 그 순간이 좋거든요. 근데 자물쇠 대신 "주의요함"이 떴습니다.
서브도메인은 되는데 루트만 안 된다
ACM에서 와일드카드 인증서(*.deoklab.com)를 발급받았고, ALB에도 연결했습니다. 서브도메인은 잘 됩니다. 자물쇠도 뜨고, 인증서 정보도 정상이고. 근데 루트 도메인인 deoklab.com만 안 되는 겁니다.
솔직히 처음에는 ACM 설정을 잘못했나 싶어서 몇 번을 확인했습니다. 인증서 상태도 "발급됨"이고, ALB 리스너에도 잘 붙어 있고. 뭐가 문제인지 감이 안 잡히더라고요.
와일드카드(*)는 서브도메인 전용입니다
아파트 마스터키를 생각해보면 이해가 빠릅니다. 마스터키는 101호, 102호, 201호... 모든 호실의 문을 열 수 있습니다. 근데 아파트 현관 공동출입문은 못 엽니다. 마스터키는 "호실"에 대한 키이지, "건물 자체"에 대한 키가 아니거든요.
와일드카드 인증서가 정확히 이겁니다. .deoklab.com에서 별표()는 점(.) 앞에 뭔가가 있는 경우만 매칭됩니다.
service-api.deoklab.com → 별표가 service-api를 잡음 → 통과
www.deoklab.com → 별표가 www를 잡음 → 통과
deoklab.com → 점 앞에 아무것도 없음 → 매칭 안 됨
이게 AWS만의 제한이 아닙니다. RFC 6125라는 SSL/TLS 표준에 명시된 규칙입니다. 막상 알고 나니까 단순한 건데, 모르면 계속 ACM 설정만 뒤지게 되더라고요.

인증서를 새로 발급하면 끝납니다
해결 방법은 인증서를 새로 발급받는 겁니다. 사실 기존 인증서에 도메인을 추가하는 건 안 됩니다. ACM에서 인증서를 요청할 때 도메인 이름에 deoklab.com을 넣고, "이 인증서에 다른 이름 추가"를 눌러서 *.deoklab.com을 함께 넣으면 됩니다. 하나의 인증서로 루트 도메인과 모든 서브도메인을 동시에 커버하는 거죠.

DNS 검증 후 발급까지 1~2분이면 끝나고, ALB 리스너의 HTTPS:443에서 기본 SSL/TLS 인증서를 새 인증서로 교체하면 바로 적용됩니다. 시크릿 모드로 접속하면 브라우저 캐시 없이 바로 확인할 수 있습니다.
로드밸런스 메뉴에 들어가 해당 로드밸런스를 선택후 하단에 '리스너 및 규칙'탭으로 이동합니다. 이후 443 포트를 체크한 뒤 '리스너 관리' -> 'SNI용 SSL 인증서 추가' 메뉴로 들어가 위에서 추가한 인증서를 등록합니다.

DNS 검증 후 발급까지 1~2분이면 끝나고, ALB 리스너의 HTTPS:443에서 기본 SSL/TLS 인증서를 새 인증서로 교체하면 바로 적용됩니다. 시크릿 모드로 접속하면 브라우저 캐시 없이 바로 확인할 수 있습니다.
와일드카드 인증서라고 하면 "모든 도메인을 다 커버하겠지"라고 당연하게 생각했습니다. 사실 이름부터가 와일드카드니까요. 근데 막상 확인해보니 루트 도메인은 빠져 있었고, 이건 AWS 설정 문제가 아니라 SSL 표준 자체가 그렇게 정해놓은 규칙이었습니다.
마무리
와일드카드 인증서라고 하면 "모든 도메인을 다 커버하겠지"라고 당연하게 생각했습니다. 사실 이름부터가 와일드카드니까요. 근데 막상 확인해보니 루트 도메인은 빠져 있었고, 이건 AWS 설정 문제가 아니라 SSL 표준 자체가 그렇게 정해놓은 규칙이었습니다.
정리하면 이겁니다. 와일드카드(*)는 서브도메인 전용이고, 루트 도메인은 별도로 추가해야 합니다. ACM에서 인증서를 발급할 때 처음부터 example.com과 *.example.com을 함께 넣는 게 정답입니다. 5분이면 될 걸 모르면 30분을 쓰게 됩니다.
*.example.com ≠ example.com, 이것만 기억하면 됩니다.