개발놀이터

CAS 인증서버 구축하기 (5) : 모든 EC2 인스턴스를 HTTPS로 전환하기 본문

Spring/Spring Security

CAS 인증서버 구축하기 (5) : 모든 EC2 인스턴스를 HTTPS로 전환하기

마늘냄새폴폴 2024. 2. 29. 21:45

저번 포스팅에선 SSLHandshakeException이 발생했었습니다. 이 문제를 해결하기 위해서는 EC2 인스턴스의 SSL 설정을 해줘야합니다.

 

보통 WAS 서버에 HTTPS를 적용하는 방법은 NginX나 Apache같은 웹서버에 SSL 인증서를 등록하여 해결할 수 있습니다. 

 

저는 AWS ACM 인증서를 가지고 있었기 때문에 AWS ALB에 ACM을 연결하여 HTTPS 설정을 할 수 있었지만 이참에 회사에서 사용하는 NginX에 대해 공부하고자 NginX에 SSL 설정을 하는 방법을 강구했습니다. 

 

네... 결론만 말하자면 ACM을 이용해서 SSL을 설정하는 것을 불가능합니다. 우선 NginX에 SSL 설정을 위해서는 다음과 같은 설정이 필수적으로 필요합니다. 

 

server {
  listen 443 ssl http2;
  server_name example.com;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  
  location / { # 
    proxy_pass https//localhost:9001;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

 

여기서 ssl_certificate와 ssl_certificate_key이 필요합니다. ssl_certificate는 CA에서 제공해주는 인증서를 등록해야합니다. 여기서는 pem 기반 인코딩 방식의 pem 확장자 혹은 crt 확장자면 됩니다. 

 

이때 ssl_certificate는 full-chaining 된 인증서여야합니다. 여기서 chiaining이란 단순히 CA에서 등록한 인증서를 기반으로 SSL통신을 하는 것이 아니라 추가적인 하나이상의 CA에서 발급한 인증서를 체이닝해서 연결해야한다는 뜻입니다. 

 

또한, ssl_private_key는 CA에서 발급한 인증서와 일치하는 private_key의 위치를 적어주시면 됩니다. 

 

이 두개는 openssl 명령어를 이용해 일치하는지 확인하고 등록하시는 것을 추천드립니다. 

 

openssl x509 -noout -modulus -in /path/to/your/certificate.pem | openssl md5
openssl rsa -noout -modulus -in /path/to/your/private.key | openssl md5

 

이 명령어를 이용해 둘이 일치하는지 확인하시면 됩니다. 

 

ACM 얘기하다 갑자기 뜬금없이 NginX의 SSL설정 얘기는 왜하느냐... 

 

네... ACM은 private-key 추출이 불가능했습니다. 이를 해결하기위해 AWS PCA라는 사설 인증서 (유료) 를 이용해 private-key를 추출하기 위해 PCA를 신청하고 추출하려 했지만 IAM 정책이 잘 적용되지 않는 문제 (아직도 해결 못했습니다.) 때문에 NginX SSL 설정을 못했습니다. 

 

때문에 제가 잘 알고있는 AWS ALB를 이용해서 ACM을 적용해 HTTPS를 적용했습니다. 

 

AWS ALB를 이용해 SSL설정을 하는 방법은 제가 쓴 글인 아래의 링크를 확인해주시면 감사하겠습니다. 

 

https://coding-review.tistory.com/432

 

ACM + ALB 를 이용해 HTTPS 적용하기 (1)

이번 포스팅에선 AWS에서 HTTPS 적용하는 방법에 대해서 포스팅해보도록 하겠습니다. 조금 복잡할 수 있으니 순서대로 차근차근 알려드리겠습니다. 시작하죠! HTTPS 적용하기 1. 도메인 구매하기 우

coding-review.tistory.com

 

다만 여기서 주의해야 할 점은 타겟그룹을 설정할 때입니다. 타겟그룹을 설정해줄 때 HTTP or HTTPS 프로토콜을 선택하고 포트를 입력하는 곳이 있는데 기본적으로 CAS는 HTTPS 기반의 통신을 기본값으로 설정하고 있기 때문에 HTTPS로 타겟그룹을 설정해야합니다. (이것도 삽질 좀 오래했습니다.)

 

만약 타겟그룹의 프로토콜을 HTTP로 설정한다면 인증서가 잘 적용되었다는 표시가 뜨지만 정작 400 Bad Request가 뜨는 기이한 상황이 펼쳐집니다. 

 

이렇게 모든 EC2에 HTTPS를 적용하면 로그인이 성공하는 모습을 볼 수 있습니다. 

 

여기까지 EC2 인스턴스에 HTTPS 적용하는 방법에 대해서 알아봤습니다. 여러분은 삽질하지 마시고 순탄대로 적용하셨으면 좋겠습니다. 다음 포스팅은 CAS의 인증정책에 대해서 알아보도록 하겠습니다.