SSL/TLS 인증서

도은호·2025년 10월 7일

AWS SAA

목록 보기
19/53

인증서는 보통 ACM(AWS Certificate Manager) 에서 발급·보관하고, Listener(HTTPS/TLS) 에 연결해 TLS 종료(termination) 를 함. SNI로 여러 인증서를 붙일 수 있고, 보안 정책(Security policy) 으로 TLS 버전/암호군을 제어


1) 어디에, 어떤 인증서를 쓰나?

  • ACM(권장)

    • 퍼블릭/프라이빗 인증서 요청·관리. 프라이빗 키는 ACM이 보관(가져갈 수 없음).
    • 자동 갱신(DNS 검증 유지 시) + ELB에 무중단 교체 가능.
    • Region 종속: ELB와 같은 Region 에 있는 인증서만 연결 가능.
  • Import(가져오기)

    • 외부 CA에서 발급받은 서버 인증서(+체인+프라이빗 키) 를 ACM에 가져와서 사용.
    • ACM에 올린 뒤엔 프라이빗 키를 다시 꺼낼 수 없음 → 원본을 안전하게 보관해야 함.
    • 자동 갱신 없음(직접 회전 필요).
  • ACM Private CA

    • 사내 PKI 필요 시. ELB에서 프라이빗 인증서로 내부 엔드포인트 보호.

실무 포인트: 퍼블릭 트래픽은 ACM 퍼블릭 인증서 + DNS 검증 + 자동 갱신이 가장 단순


2) ALB vs NLB: TLS 어디서 종료할까?

  • ALB(HTTPS Listener)

    • L7(HTTP/HTTPS). TLS 종료 후 Host/Path/Header/Query 기반 라우팅 가능.
    • 백엔드로 HTTP 또는 HTTPS(백엔드까지 암호화) 선택 가능.
  • NLB(TLS Listener)

    • L4(TCP/UDP/TLS). Static IP/EIP 필요하거나 초저지연일 때.
    • TLS 종료(Listener=TLS) 또는 패스스루(Listener=TCP, 백엔드가 직접 TLS) 선택.

엔드-투-엔드 암호화가 필요하면: 프런트(ELB)에서 TLS 종료 + 백엔드로도 HTTPS/TLS 로 연결.


3) SNI & 다중 인증서

  • SNI(Server Name Indication)하나의 Listener에 여러 인증서를 붙일 수 있음.
  • 클라이언트가 보낸 호스트명에 맞춰 인증서를 선택. SNI 미지원 클라이언트기본 인증서로 응답.
  • RSA + ECDSA 동시 탑재 가능(근래 브라우저는 ECDSA 선호, 레거시는 RSA 사용).

4) 보안 정책(Security Policy)

  • Listener에 보안 정책을 지정해 TLS 버전(예: 1.2/1.3)Cipher Suites 를 제어.

  • 원칙:

    • 최신 권고 정책 사용(가능하면 TLS 1.2/1.3)
    • 구형 클라이언트 호환이 필요 없으면 낮은 버전·취약 Cipher 비활성화
    • 내부 전용 NLB라도 최소한의 현대적 암호군 권장

5) 인증서 수명주기(요청·연결·회전)

  1. 요청(Request)

    • ACM에서 Request a certificateDNS 검증 권장(Route 53이면 자동화 쉬움).
    • SAN(Subject Alternative Name) / 와일드카드(*.example.com) 계획을 미리 잡기.
  2. 연결(Attach)

    • ALB: HTTPS ListenerDefault certificate 지정 → 필요 시 SNI 추가 인증서 더 붙이기.
    • NLB: TLS Listener 에 동일하게 연결.
  3. 회전(Rotation)

    • ACM 퍼블릭 인증서: 자동 갱신. Listener는 동일 ARN로 갱신 반영(교체 과정 무중단).
    • Import 인증서: 만료 전에 새 인증서 추가 → Default로 전환 → 구 인증서 제거 순으로 무중단 교체.

6) 클라이언트 IP, 헤더, 로깅

  • ALB: TLS 종료 후 백엔드에서 X-Forwarded-For(원 IP), X-Forwarded-Proto/Port 활용.
  • NLB: 기본적으로 원본 IP 보존. (TLS 종료 시에도 보존 특성 유지)
  • Access Logs: S3로 저장, CloudWatch Metrics 로 지표 모니터링.

7) mTLS(클라이언트 인증) 개념 정리(간단)

  • “서버 인증”뿐 아니라 클라이언트 인증서를 요구하는 방식.
  • L7 기준(HTTP): 인증·권한은 보통 ALB OIDC/Cognito 조합으로 대체되는 경우가 많음.
  • mTLS가 꼭 필요(서버↔서버 트러스트) 시, 최신 문서의 지원 범위/구현 패턴을 확인하고 설계(신뢰 저장소, CRL/OCSP 처리 등).

시험 대비: “클라이언트 인증서가 필요하다”라는 키워드가 나오면 mTLS/프록시 계층을 떠올리고, 운영 복잡성·성능 영향까지 고려하자.


8) 자주 하는 실수 & 체크리스트

  • Region 불일치: ELB와 인증서 Region 같게
  • 도메인 검증 실패: DNS CNAME 유지(자동 갱신 위해 삭제 금지)
  • 체인(Intermediate CA) 누락: Import 시 Cert + Chain + Private Key 모두 업로드
  • 보안 정책 구식: 최신 정책 적용, TLS1.0/1.1 비활성 고려
  • SNI 기본 인증서 설정: SNI 미지원 클라이언트 대비 Default certificate 올바르게 지정
  • 만료 경보: Import 인증서는 CloudWatch Alarms/챗옵스로 만료 30~45일 전 알림
  • RSA+ECDSA 동시 탑재: 호환성과 성능(핸드셰이크) 균형

9) CLI 예시

ACM 인증서 요청(DNS 검증)

aws acm request-certificate \
  --domain-name api.example.com \
  --validation-method DNS \
  --subject-alternative-names api.internal.example.com

ALB HTTPS Listener 생성 + 인증서 연결

# Target Group(예: HTTP 80)
aws elbv2 create-target-group \
  --name tg-web --protocol HTTP --port 80 --vpc-id vpc-xxxx

# ALB 생성
aws elbv2 create-load-balancer \
  --name alb-web --subnets subnet-a subnet-b --security-groups sg-alb

# HTTPS Listener (ACM Cert ARN 필요)
aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:...alb-web/... \
  --protocol HTTPS --port 443 \
  --certificates CertificateArn=arn:aws:acm:...:certificate/xxxxxxxx \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:...:targetgroup/tg-web/...

NLB TLS Listener 생성

# Target Group (TCP 443 → 백엔드도 TLS면 443/TLS 또는 8443 등)
aws elbv2 create-target-group \
  --name tg-tls --protocol TCP --port 443 --vpc-id vpc-xxxx

# NLB 생성
aws elbv2 create-load-balancer \
  --name nlb-edge --type network --subnets subnet-a subnet-b

# TLS Listener
aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:...nlb-edge/... \
  --protocol TLS --port 443 \
  --certificates CertificateArn=arn:aws:acm:...:certificate/yyyyyyyy \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:...:targetgroup/tg-tls/...

SNI 추가 인증서(Listener에 다중 추가)

aws elbv2 add-listener-certificates \
  --listener-arn arn:aws:elasticloadbalancing:...:listener/app/alb-web/... \
  --certificates CertificateArn=arn:aws:acm:...:certificate/zzzzzzzz

보안 정책 변경(예시)

aws elbv2 modify-listener \
  --listener-arn arn:aws:elasticloadbalancing:...:listener/app/alb-web/... \
  --ssl-policy ELBSecurityPolicy-2023-Modern

정책 이름은 예시입니다. 콘솔/공식 목록에서 최신 권고 정책을 선택하세요.


10) 설계 패턴 요약

  • 퍼블릭 웹: ALB + ACM 퍼블릭 인증서 + 최신 보안 정책 + SNI
  • 고정 IP 필요: NLB(TLS) + EIP + ACM 인증서
  • 엔드-투-엔드 TLS: ALB/NLB에서 종료 + 백엔드 HTTPS
  • 멀티 도메인: SNI + SAN/와일드카드 조합
  • 레거시 호환: RSA+ECDSA 이중 탑재, 보안 정책은 현실적인 타협

요약

  • ACM 인증서 + HTTPS/TLS Listener 가 표준.
  • SNI로 여러 인증서, RSA+ECDSA 동시 탑재로 호환성/성능 확보.
  • 보안 정책으로 TLS 버전·Cipher 관리, DNS 검증 유지로 자동 갱신.
  • Region/체인/만료 실수만 피하면, ELB의 TLS 운영은 매우 단순해짐.
profile
`•.¸¸.•´´¯`••._.• 🎀 𝒸𝓇𝒶𝓏𝓎 𝓅𝓈𝓎𝒸𝒽💞𝓅𝒶𝓉𝒽 🎀 •._.••`¯´´•.¸¸.•`

0개의 댓글