HTTPS를 왜 도입하게 되었을까요?

  • 모두모여라 사이트에 보안상의 이유와 프로젝트 요구사항으로 인해 HTTPS를 적용하고자 하였습니다.
  • HTTP만을 사용하기에는 HTTP 메시지를 누구나 볼 수 있다는 문제점도 있고, 웹브라우저 자체에서 HTTP가 안전하지 않다고 표시되는 부분이 조금 신경쓰였습니다.

 

SpringBoot 설정 vs Nginx 설정 비교

HTTPS 적용에 앞서 HTTPS를 어떻게 적용해야 할 지 고민하였습니다. HTTPS 설정을 SpringBoot에서도 설정해 줄 수 있었고, Nginx에서도 설정할 수 있었습니다. SpringBoot에서 적용하나, Nginx에서 적용하나 간단하게 적용할 수 있었습니다. 둘 중 어느 방식을 사용해야 하는지 찾아보고 고민해 보았습니다.

 

먼저 SpringBoot에서의 설정입니다. yml 파일을 설정하는 방식으로 간단하게 적용 가능합니다.

server:
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: password
    key-store-type: pkcs12
    key-alias: springboot
    key-password: password
  port: 8443

 

 

다음으로 Nginx에서의 설정 방식입니다. 기존 설정에 ssl 관련 설정을 추가하는 방식으로 간단하게 적용 가능합니다.

ssl on; 
server_name www.sslcert.co.kr; 
ssl_certificate_key /파일경로/~~.pem;
ssl_certificate /파일경로/~~.pem; 

 

Nginx와 SpringBoot 설정 자체는 둘 다 그렇게 복잡하지 않은 것 같습니다. 그렇다면 현재 프로젝트에 맞는 설정은 무엇인지 고민하고 적용해 보겠습니다.

 

모모 팀 프로젝트 아키텍처

  • 현재 프로젝트에서는 Nginx를 각각 앞단에 두어 프론트와 백을 배포하고 있었습니다.
  • 팀에서는 Nginx에 SSL을 적용하도록 결정하였습니다.

 

왜 Nginx에 SSL을 두었을까?

  • SpringBoot에 SSL을 두게 되면, Nginx를 없애야 합니다.
    • 사용자는 Nginx에 접근하고 Nginx에서 서버로 접근하기 때문입니다.
  • 처음엔 두 가지 방식 모두 적용 가능했습니다. 마음만 먹으면 Nginx를 제거할 수도 있는 등 Nginx를 자유롭게 사용할 수 있었기 때문입니다. 하지만 추후 저희 프로젝트에서는 Nginx를 사용하여 로드 밸런싱을 하였는데, 이 과정에서 다음 두 가지 이유로 인해 Nginx로 고정되게 되었습니다.
    • 모든 서버에서 인증서와 비밀키를 가지고 있어야 할 필요가 있을까요?
    • 클라이언트 ↔ Nginx, Nginx ↔ WAS 구조가 될 텐데, 스프링 부트에 SSL을 걸게 되면 클라이언트에서 Nginx로 접근하려고 할 때는 HTTP 요청이지 않을지.. 오히려 클라이언트에서 NginX로 전달하는 HTTP 메시지를 암호화하는 것이 의미가 있는 것이 아닐까요?

 

HTTPS의 문제점??

  • 그렇다면 HTTPS를 도입하기 전에.. HTTPS를 도입했을 때의 문제점은 없나 찾아 보았습니다.
  • 성능 상의 문제, HTTPS는 HTTP 대비 느리다는 말이 있었습니다.
    • SSL 핸드셰이크, 전송 전후로 암복호화가 일어난다면 속도 차이가 있을 것 같았습니다.
  • 실제로 어느정도의 속도 차이가 있을지 테스트를 진행해 보겠습니다. 이 때 접근 대상은 API 문서에 대한 접근 테스트입니다. 
  • 먼저, HTTPS를 사용했을 경우의 응답 시간입니다.

HTTPS의 응답 시간

  • 다음으로, HTTP를 사용했을 경우의 응답 시간입니다.

결론

  • 예상한 대로 HTTPS가 대략 1ms정도 느린 결과가 도출되었습니다.
  • 목표로 하는 동시 접속 인원수가 적어 1ms정도의 시간은 개인적으로 고려해야 할 정도는 아니라고 판단되었습니다. 이 부분은 팀적으로도 동의되어 HTTPS를 적용하는 쪽으로 결정하였습니다.

+ Recent posts