이번에 개발한 trading-bot을 배포하면서 Spring Boot application에 https를 적용하는 것에 애를 먹어서 내용을 정리차 포스팅 합니다.
저는 Google domains에서 도메인을 발급받아 사용했습니다.
예를 들어 서비스할 web application이 abc.moving.com라는 도메인을 사용한다고 가정해 봅시다.
저는 movingjin.com이라는 도메인을 구매해서 구매한 도메인을 레코드 유형A로 등록 후, 서비스에 필요한 도메인을
레코드 유형 CNAME으로 등록하여 사용했습니다.
아래와 같이 abc.movingjin.com이라는 도메인을 CNAME으로 생성합니다.
그 후, nginx proxty manager로 이동하여 생성한 도메인과 내부ip, 포트번호를 입력합니다.
SSL 탭으로 이동해서 "Force SSL"을 활성화 시키고 저장합니다.
이 때, "HSTS Enabled" 같이 선택해서 인증서를 생성하면, 인증서 생성중 실패하게 됩니다.
원인까진 파악하지 못했지만, 생성후 나중에 활성화하여 저장할 수 있으니 지금은 생략하고 인증서를 생성합니다.
원인을 알아내어 수정합니다.
npm에서 let's encrypt 인증서를 생성하려면
- npm으로 연결되는 80, 443 포트가 외부에서 접속이 가능해야합니다.
- 인증서를 생성하려는 도메인(여기서는 abc.movingjin.com)이 CNAME으로 등록되어 있어야합니다.
nginx proxy manager에선 기본적으로 let's encrypt 인증서를 생성해줍니다.
이상없이 Host 등록을 마쳤다면, SSL Certificates 탭으로 이동해서 방금 생성한 인증서를 다운로드 받습니다.
다운로드 받은 인증서를 NAS로 업로드한 후, 압축을 풉니다.
압축파일엔 cert1.pem, chain1.pem, fullchain1.pem, privkey1.pem 이렇게 4개의 인증서파일이 있는데,
이 중, fullchain1.pem, privkey1.pem을 사용해서 p12파일로 변환작업을 수행합니다.
Spring Boot applicationd에서 사용하는 인증서는 p12파일을 사용하기 때문입니다.
아래의 명령어를 입력하여 p12파일을 생성합니다.
$sudo openssl pkcs12 -export -in fullchain1.pem -inkey privkey1.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root
생성된 p12를 다운로드 받아 프로젝트 resources 디렉토리 아래 ssl 디렉토리를 생성 후, 위치시켜 줍니다.
마지막으로 application.yml에 인증서 암호를 입력후, 빌드합니다.
server:
ssl:
key-store: classpath:ssl/keystore.p12
key-store-type: PKCS12
key-store-password: abc
빌드완료된 jar파일을 서버에 업로드한 뒤에 실행하면, "https:도메인명" 으로 접속이 가능해집니다.
이상으로 nginx proxy manager에서 spring boot https 인증서를 설정하는 포스팅을 마치겠습니다.
'환경구성' 카테고리의 다른 글
CentOS8 에 yum repository가 없을 때 (0) | 2022.04.29 |
---|---|
CentOS7에 최신버전의 Docker, docker-compose 설치하기 (0) | 2022.04.11 |
Synology NAS docker에 port, password 지정해서 Redis 올리기 (0) | 2022.01.28 |
Mongodb database 와 계정 생성 후, Authorization failed 나는 경우 (0) | 2022.01.23 |
IntelliJ에서 java command line 실행명령어를 보고 싶은 경우 (0) | 2022.01.19 |