나중에해봐! [실습] 인증서 발급 및 HTTPS 서버 구현

2022. 7. 21. 13:41카테고리 없음

막혀서 못해써 

바빠서 나중에 해 진도부터빼자

[실습] 인증서 발급 및 HTTPS 서버 구현

 

Before You Learn

  • HTTP에 대한 이해

Achievement Goals

  • HTTPS의 개념을 이해할 수 있다.
  • HTTPS가 왜 인증에서 필요하고, 왜 사용해야 하는지 이해할 수 있다.

Bare minimum requirement

  • 로컬 환경(localhost)에서 인증서를 생성하고, 인증서를 이용해 HTTPS 서버를 만드세요.

Getting Started: HTTPS 사설 인증서 발급 및 서버 구현

이번 시간에는 아래 설명을 참고하여 HTTPS를 학습하고 서버를 직접 구현합니다. 별도의 테스트는 존재하지 않지만 아래 설명을 따라 직접 HTTPS 서버를 구축해야 다음 Part를 진행하실 수 있습니다.

Spring Initializr에서 기본 웹 서버 프로젝트를 생성 후 실습을 진행하세요.

자바는 다음과 같은 두 가지의 인증서 형식을 지원합니다.

  1. PKCS12 (Public Key Cryptographic Standards #12) : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식입니다. 업계에서 널리 사용됩니다.
  2. JKS (Java KeyStore) : PKCS12와 유사합니다. 독점 형식이며 Java 환경으로 제한됩니다.

설치

mkcert라는 프로그램을 이용해서 로컬 환경(내 컴퓨터)에서 신뢰할 수 있는 인증서를 만들 수 있습니다. mkcert는 PKCS12 형식만 지원합니다.

Window 학습자 및 Ubuntu 학습자

Window 사용자의 경우 WSL 터미널에 다음 명령어를 이용해 설치합니다.

$ sudo apt install libnss3-tools
$ wget -O mkcert <https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64>
$ chmod +x mkcert
$ sudo cp mkcert /usr/local/bin/
  • 주의

설치가 안되는 경우 다음 명령어를 실행한 후 다시 설치를 진행해주세요.

1
$ sudo apt update

macOS 학습자

macOS 사용자의 경우, Homebrew를 통해 mkcert를 설치할 수 있습니다.

$ brew install mkcert

# firefox를 사용할 경우 필요에 따라 설치해주세요.
$ brew install nss

인증서 생성

먼저 다음 명령어를 통해 로컬을 인증된 발급기관으로 추가해야 합니다.

$ mkcert -install

CA가 생성되고 설치되면 PKCS12 형식 인증서를 생성할 수 있습니다.

PKCS12 인증서를 생성하기 위해 다음 명령을 사용합니다.

$ mkcert -pkcs12 localhost

이제 옵션으로 추가한 localhost에서 사용할 수 있는 인증서가 완성되었습니다. 해당 커맨드를 입력한 위치에 localhost.p12라는 파일이 생성된 것을 확인할 수 있습니다.

여기서 발급받은 인증서를 앞으로 진행할 스프린트에서 계속 활용하게 됩니다. 저장 경로를 반드시 확인하세요.

HTTPS 서버 작성

Spring Boot를 이용하면 HTTPS 서버를 간단하게 작성할 수 있습니다.

  1. 생성된 인증서를 resources 폴더로 이동합니다.
  1. application.properties 에서 관련 설정을 추가 합니다.
server.ssl.key-store=classpath:localhost.p12    -> 인증서 경로를 적습니다.
server.ssl.key-store-type=PKCS12                -> 인증서 형식을 적습니다.
server.ssl.key-store-password=changeit          -> 인증서 비밀번호를 적습니다.

//여기서 비밀번호인 changeit은 비밀번호를 설정하지 않았을 때의 기본값입니다.
//인증서 비밀번호는 인증서를 생성할 때 설정하거나 생성 후 변경해줄 수 있습니다.
//비밀번호 설정 방법은 한번 찾아보시기 바랍니다 :)

작성 완료 후 서버를 실행해보면 다음과 같이 HTTPS 서버가 잘 작동하는 것을 확인하실 수 있습니다.