여기선 Spring Boot에 SSL인증서를 적용하는 방법만 설명하며 자세한 인증서 발급 과정은 생략한다. Show 발급받은 인증서를 보면 key, crt, pfx파일이 존재한다.
$ keytool -importkeystore -srckeystore domain.pfx -destkeystore domain.jks -deststoretype pkcs12 키 저장소 domain.pfx을(를) domain.jks(으)로 임포트하는 중... 대상 키 저장소 비밀번호 입력 : 새 비밀번호 다시 입력 : 소스 키 저장소 비밀번호 입력 : 대상 키 저장소 비밀번호는 인증서 발급시 입력한 비밀번호와는 무관하므로 사용하고자 하는 비밀번호를 입력한다. 소스 키 저장소 비밀번호는 인증서 발급 파일에 포함된 pfx.txt에 적힌 비밀번호를 입력한다. 생성된 domain.jks파일을 src/main/resources 위치로 복사한다. 그다음 application.properties에 인증서 정보를 다음과 같이 작성한다. server.port=8443 server.ssl.key-store=classpath:domain.jks server.ssl.key-store-password=대상 키 저장소 비밀번호 server.ssl.key-store-type=JKS server.ssl.key-alias=domain server.ssl.key-password=소스키 저장소 비밀번호 Spring Boot가 정상적으로 기동되는지 확인한다. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.7.RELEASE) ... 20200908 09:37:38.060 [main] INFO c.u.j.d.DefaultLazyPropertyDetector - Property Detector custom Bean not found with name 'encryptablePropertyDetector'. Initializing Default Property Detector 20200908 09:37:38.254 [main] INFO o.s.b.w.e.t.TomcatWebServer - Tomcat initialized with port(s): 8443 (https) 20200908 09:37:38.268 [main] INFO o.a.c.h.Http11NioProtocol - Initializing ProtocolHandler ["https-jsse-nio-8443"] 20200908 09:37:38.278 [main] INFO o.a.c.c.StandardService - Starting service [Tomcat] 20200908 09:37:38.278 [main] INFO o.a.c.c.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.22] ... 인터넷창에 https://도메인:8443을 입력하여 접속이 잘 되는지 확인한다. 끝. 이번 포스팅에서는 Springboot에 HTTPS를 구축하는 방법을 알아보도록 하겠습니다. 그동안은 서비스를 출시 하더라도 SSL, HTTPS, CA 개념https://galid1.tistory.com/602 이번 포스팅은 SSL, HTTPS, CA에 대한 개념을 가지고 계시다는 전제하에 진행을 하도록 하겠습니다. 잘 모르시다면 위 링크를 참고해주세요. Let's Encrypt 등장배경기존의 이에 따라 웹사이트의 또한, 2017년 즈음부터 구글에서 발표한 내용에 따르면, 국내 대다수의 기업이 Spring boot에 Let's encrypt를 통해 발급받은 SSL인증서로 HTTPS 구축하기. (feat. AWS)구축 방법에 대한 설명은 다음의 절차로 진행하도록 하겠습니다.
몇몇 내용들은 이전에 포스팅한 링크로 대체하도록 하겠습니다. 1. 준비물
특별히 필요한 준비물은 위와 같습니다. 도메인을 부여하기 위해서는 공인 IP가 부여된 서버가 필요하며, 2. AWS EC2 서버 생성 및 공인 IP 발급 (EC2)
https://galid1.tistory.com/224 EC2를 생성하기 위해서 위의 링크를 참고해주세요.
위의 절차를 따라하셨다면 이미 공인IP를 발급 받으셨습니다.
3. 도메인 구매 및 DNS 등록 (Route 53)3.1 도메인 구매https://galid1.tistory.com/358 AWS Route53을 통해 도메인을 구매하기 위해서는 위의 링크를 참고해주세요. 3.2 DNS 등록DNS는 다들 아시다시피 도메인에 연결된 서버 IP를 찾아주는 역할을 하는 시스템을 의미합니다. 즉 도메인을 이용해 우리의 서버로 요청을 할 수 있도록 도와주는 역할을 합니다. 우선 DNS 등록을 위해서는 서버의
레코드 세트 생성을 클릭한 뒤, 적절한 DNS 레코드 이름을 부여하고,
4. Let's Encrypt를 이용해 SSL 인증서 발급저의 경우 실습환경이 4.1 certbot을 이용해 인증서발급
https://certbot.eff.org/ 우선 위의 링크로 이동합니다. 그
후 사이트 중간쯤에 보시면
이제 페이지에 보이는 절차를 따라하면 됩니다. 첫째로 HTTP 웹사이트가 구동중인 서버로 접속해야합니다. SSH 클라이언트를 이용해 접속합니다. https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-enable-epel/ 그 후, CentOS의 경우 위의 링크로 이동하면 CentOS 배포버젼별 명령어가 보이는데요, Amazon Linux2의 경우에는 위의 명령어를 입력하면 됩니다. 이유는 더 찾아봐야 합니다만, 위의 설명대로면 optional channel을 활성화 해야한다고 합니다. 명령어를 따라 입력합니다. (위의 명령어를 입력하기 위해서는 관리자(root) 여야 하므로, 드디어 자동으로 인증서를 발급받는 부분입니다. 위 그림처럼 명령어를 입력하면, 이메일을 입력하라고 나타납니다 이메일을 입력해줍니다. 곧이어 동의 절차글이 나타납니다. 성공한다면 위와 같은 화면이 나타납니다. 위에서 알려주는 경로로 이동합니다. 4.2 pem을 PKCS12 형식으로 변경발급받은 키들이 모여있는 위치로 이동하여 위의 명령어를 입력하면 key file을 5. Spring boot에서 인증서를 적용5.1 keystore를 로컬로 옮기기앞서서 말씀드렸듯이 저는 Window에서
개발을 진행하고 있어서, 리모트서버에서 https://luckyyowu.tistory.com/321 우선 연결할 대상인 원격서버를
등록하기 위해 그림에 보이는 아이콘을 클릭합니다. 그 후 접속시 위와 같이 permission denied가 나타난다면, 위의 명령어를 통해서 5.2 Spring Boot 설정Spring Boot를 실행합니다. 그후 그 후 위와 같이 간단히 Controller를 생성합니다. 서버를 실행한 뒤, 위와 같이 도메인을 입력하여 접속합니다. (https://localhost:443) 443은 생략가능합니다. 6 EC2로 배포6.1 deployment tool 설정이제 설정을 완료했으니, SpringBoot Application을 EC2로 다시 배포해야합니다.
6.2 Gradle을 이용한 배포하기 위한 jar파일 생성gradle task를 이용해 jar파일을 생성하려면 우측의 아까 말씀드렸던 6.3 deployment tool을 이용해 배포여기서 조금 많이 헤메실 수 있는데요, 우선 방금 생성된 remote 서버를 확인하면 성공적으로 배포가 이루어진것을 확인할 수 있습니다. 6.4 jdk 설치 및 Spring Boot Application 실행java application을 실행하기 위해서는 당연히 jdk가 설치되어있어야 합니다. 위 명령어를 통해 설치합니다. 위의 명령어를 이용해 어플리케이션을 실행합니다. 성공입니다. 7. SSL 확인https://www.ssllabs.com/ssltest/ HTTPS 가 성공적으로 인증이 되고있는지 확인을 위해서는 위의 사이트로 이동해 검증을 해보아야 합니다. 도메인을 입력한 뒤 submit을 클릭합니다. 검증결과 입니다. 성공하셨다면 위와 같은 그림을 보실 수 있습니다. 하지만 8. DNS에 CAA레코드 등록
CAA는 등록된 HTTP사이트의 SSL 인증서를 보관하고 있는 https://letsencrypt.org/docs/caa/ 위의 링크로 이동하면 CAA에 대한 자세한 정보를 얻을 수 있습니다.
긴글 읽어주셔서 감사합니다. |