인프런 커뮤니티 질문&답변

손창현님의 프로필 이미지

작성한 질문수

초보를 위한 도커 안내서

안녕하세요 :) SSL 키 외부 주입 방법이 궁금합니다

해결된 질문

작성

·

508

3

안녕하세요 : )

얼마 전에 - e 옵션으로  application-properties 변수 값을 외부에서 주입하는 방법에 대해 질문 드렸고

subicura님께서 답변 주신 내용을 통해 잘 적용되는 것을 확인하였습니다.

 

한 가지 더 궁금한게 생겼는데요,

일단 제 상황은 이렇습니다.

 

저는  퍼블릭한 spring boot 프로젝트 서버 이미지를 제공하고 싶습니다.

예를 들어,  mypublic/client:lts ,  mypublic/server:lts   라는 두개의 이미지를 허브에 올리면

사용자들이  두 이미지를 [사용자의 ec2 서버에] 내려받은 뒤,  컨테이너를 띄우면

[사용자의 도메인]   에서  웹 서비스를 이용할 수 있게끔 하고 싶습니다.

이 때, https 적용을 할 수 있게끔 가이드를 제공하고 싶습니다.

 

먼저 제 ec2 서버에 테스트를 해본 결과,

ec2에 nginx를 설치하고,  letsencrypt 등으로  도메인에 대한 SSL 키를 발급받은 뒤

1) ec2 내에  nginx 관련 conf를 설정 (SSL 및 프록시 패스)

2) 발급받은 SSL 키를 알맞은 형태로 추출해서 스프링 프로젝트 내부 resources 에 넣어 주고

3) 키가 들어 있는 프로젝트를  docker build -t mypublic/server:lts .   명령어를 통해 docker image 빌드

4) docker push mypublic/server:lts    명렁어를 통해  도커 허브에 올린 뒤

5) ec2 에서 docker run  ...  -d mypublic/server:lts    명령어를 통해  컨테이너 실행

6) 최종적으로 nginx 웹서버(도메인으로 접속)와 서버 컨테이너가 https 통신이 되는 것을 확인

 

여기 까지 진행을 했습니다.

 

문제는 제 처음 목표처럼 다른 사용자들이  본인들의 ec2와 도메인을 세팅을 하고

mypublic/server:lts image를 통해 컨테이너를 실행하면  같은 SSL 키가 아니므로

https 통신을 할 수 없다는 점입니다.

 

따라서 제 생각으로는

 mypublic/server:lts image 를 docker run 하는 단계에서

사용자들이 발급받은 SSL 키를   주입하거나   컨테이너 내부에 주입할 수 있어야 할 것 같은데

아무리 생각해도  방법이 떠오르질 않습니다.

 

혹시 이런 과정에서 시도해볼만한 방법이 있을까요 ?

답변 2

0

손창현님의 프로필 이미지
손창현
질문자

DEFAULT_HOST 를 설정해서 자동으로 nginx로 SSL 연결을 해주게

제공되는 이미지가 있었네요 :)

잘 적용해보겠습니다 ㅎㅎㅎ

 

항상 감사합니다~~!!!!!

0

subicura님의 프로필 이미지
subicura
지식공유자

안녕하세요!

 

단순 학습에서 멈추지 않고, 점점 실전에 적용하시는 모습이 인상적입니다!

SSL을 범용적으로 적용하는 가장 일반적이고 간단한 방법은 다음과 같습니다.

1. 서버구성

사용자 -> nginx(80/443 오픈) -> spring boot(80 또는 8080 같은 http)

위 구성은 nginx에 SSL 인증서를 설정하여 사용자가 HTTPS로 접속할 수 있게 하고 spring boot엔 SSL 인증서 없이 nginx와 일반적인 HTTP 통신을 하는 방법입니다.

이 방법은 ssl termination 키워드로 검색해보시면 더 자세히 알 수 있고, 장점은 설정하기 쉽고 단점은 nginx와 spring boot 사이에 보안이 되지 않는 다는 점입니다. 보안에 취약점은 있지만 같은 내부 네트워크에서 nginx와 springboot를 사용하는 경우에 흔히 사용하는 방법입니다.

2. nginx에 SSL 인증서 적용하기

SSL 인증서를 적용하려면 let's encrypt를 사용하고 인증서를 발급받기 위해선 몇가지 절차가 필요합니다.

이러한 부분을 자동화 해놓은 도커 이미지를 사용하면 쉽게 사용할 수 있습니다.

certbot, nginx, docker 등의 키워드로 검색해보면 몇가지 이미지가 나오는데, 그중에 사용해본 이미지는 다음 이미지 입니다.

https://github.com/JrCs/docker-nginx-proxy-letsencrypt

 

일단 수동으로 nginx 설정을 해보시고 자동화하는 방법을 찾아보시면 도움이 될 것 같습니다.

 

감사합니다!