[개인 프로젝트(13)] 개발 환경에 HTTPS 적용 (Windows)

개발로그·2023년 11월 27일
0

개인 프로젝트

목록 보기
12/14
post-thumbnail


📌 mkcert 설치


Windows에서는 패키지 매니저인 chocolately를 사용하여 mkcert를 설치할 수 있다.

# chocolately 버전 확인
choco 

# mkcert 설치
choco install mkcert




📌 인증서 생성


# 새로운 로컬 인증 기관을 생성하고, 시스템의 신뢰할 수 있는 인증 기관 목록에 추가한다.
mkcert - install

# localhost 도메인에 대한 PKCS12 형식의 인증서 생성
# 해당 명령어를 입력한 경로에 localhost.p12 파일이 생성된다.
mkcert -pkcs12 localhost

💡 Java는 두 가지의 인증서 형식을 제공한다.

  • PKCS12
    : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식으로 널리 사용되는 형식
  • JKS
    : PKCS12와 유사하나, Java 환경으로 제한되는 형식




📌 application.yml 설정


다음과 같이, 생성된 인증서 파일 localhost.p12 를 복사하여 resources 폴더 붙여넣는다.



Spring Boot는 src/main/resources를 classpath로 인식하므로,
해당 폴더에 localhost.p12 파일을 위치시키면 application-dev.yml에서 classpath:localhost.p12로 참조할 수 있다.



application-dev.yml에 다음 설정을 추가한다.

인증서 비밀번호의 기본 값은 changeit으로,
개발 환경에서만 사용되는 인증서이므로 따로 수정하지 않았다.

server:
  ssl:
    key-store: classpath:localhost.p12
    key-store-type: PKCS12
    key-store-password: changeit


이렇게 application-dev.yml 파일을 수정하고, 어플리케이션을 실행해보면,
다음과 같이 https로 서버가 뜨는 것을 확인할 수 있다.





📌 결론


개발 환경에 HTTPS를 적용하여, 서비스가 실제 운영될 환경과 보다 유사한 환경에서 개발할 수 있게 되었다. 일부 기능은 HTTPS에서만 작동하거나, HTTP와 HTTPS 간에 다르게 작동할 수 있다.

그 중 하나가 바로, 이전 포스팅에서 다뤘던 쿠키에 JWT와 UUID를 저장하는 로직인데, JWT와 UUID를 담는 쿠키는 HTTPS 연결을 통해서만 전송되도록 설정해야 한다.


즉, 쿠키의 secure 옵션을 활성화해야 하는데 개발 환경이 HTTP라면 쿠키가 전송되지 않는다.
개발 환경에서도 쿠키가 성공적으로 전송되도록 하기 위해 본 포스팅에서는 개발 환경에 HTTPS를 적용하는 과정을 다뤄보았다.



(+) 어라라... 그런데 localhost인 경우 TLS 통신과 동일한 보안 특성으로 간주하고 HTTPS처럼 동작한다고 한다. [참고 링크]

그런데 나는 이 사실을 이미 개발 환경에 HTTPS 적용한 후에 알게 되었다.😅
호스트 네임을 localhost가 아닌 다른 이름으로 변경한 것이 아니라면
쿠키의 secure 옵션을 활성화하더라도 HTTPS처럼 동작하기 때문에, 쿠키가 정상적으로 전송될 것이다.



조금 허무하긴하지만, 미리 알아보지 않은 내 잘못,,!

다음 포스팅에서는 이미 구현한 Spring Security + JWT(3번)에 카카오 소셜 로그인 기능(1,2번)을 추가해 인증 기능 구현을 완성해보고자 한다.

  1. 카카오 소셜 로그인을 통해 우리 서비스에 로그인하려는 사용자의 신원을 확인한다.
  2. 신원이 확인되면 카카오에 해당 사용자에 대한 정보를 요청한다.
  3. 이 정보를 기반으로 우리 서비스에서 자체적으로 토큰을 발급하여 사용자를 인증한다.


0개의 댓글