JAVA/인증&보안

[Java Spring] intellij 인증서 발급 및 HTTPS 서버 구현 방법(mkcert)

_DoYun 2022. 7. 28. 11:59

자바는 대표적으로 두 가지의 인증서 형식을 지원합니다.

1) PKCS12 (Public Key Cryptographic Standards #12) : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식입니다. 업계에서 널리 사용됩니다.

2) JKS (java keystore : PKCS12와 유사합니다. 독점 형식이며 Java 환경으로 제한됩니다.

 

이번에는 PKCS12를 사용해서 인증서를 발급받아 보겠습니다.

 

# 설치

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

 

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/

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

*위와 같이 Failed가 발생할 경우 sudo apt update 실행 후 진행하시면 수월하게 진행됩니다.

 

# 인증서 생성

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

$ mkcert -install

 

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

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

$ mkcert -pkcs12 localhost

 

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

 

 

# HTTPS 서버 작성

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

먼저 생성된 인증서를 resources 폴더로 이동합니다.

 

그 다음 application.properties 에서 관련 설정을 추가 합니다.

server.ssl.key-store=classpath:localhost.p12    -> 인증서 경로를 적습니다.
server.ssl.key-store-type=PKCS12                -> 인증서 형식을 적습니다.
server.ssl.key-store-password=changeit          -> 인증서 비밀번호를 적습니다.

//여기서 비밀번호인 changeit은 비밀번호를 설정하지 않았을 때의 기본값입니다.
//인증서 비밀번호는 인증서를 생성할 때 설정하거나 생성 후 변경해줄 수 있습니다.

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