SSL/TLS인증서를 발급받기
들어가며
이번 포스팅에서는 스프링 부트를 사용하는 애플리케이션이 Let`s encrypt를 이용한 SSL/TLS 인증서를 발급받고 설정하는 방법을 알아보도록 하겠습니다.
SSL/TLS란
SSL(Secure Sockets Layer)와 TLS(Transport Layer Secuity)는 인터넷상에서 데이터의 기밀성과 무결성을 보장하는 보안 프로토콜입니다. 이 프로토콜은 주로 웹 서버 간의 통신을 암호화하여 데이터를 안전하게 전송하기 위해 사용됩니다.
Let's Encrypt
et's Encrypt는 무료, 자동, 개방형, 인증 기관(CA)입니다. 인터넷 보안을 개선하고 HTTPS 사용을 장려하기 위해서 비영리 단체로 설립되었습니다. 그래서 Let's Encrypt는 누구나 무료로 SSL/TLS 인증서를 발급받아 웹사이트에 HTTPS를 적용 가능합니다.
특징
- 가격 : AWS나 다른 상용 인증서와 달리 Let’s Encrypt 무료로 인증서를 발급받을 수 있습니다.
- 자동화 : 인증서를 발급받을 때 설치, 갱신, 발급 과정을 명령어를 사용해 자동화하여 편의성을 제공합니다.
- 개방형 : 모든 사용자가 공개적인 API의 인증서를 발급 가능
- 투명성 : 발급받은 인증서는 공개되므로 누가 발급받았는지 알 수 있습니다.
작동 방식
- 도메인 소유권 확인 : 해당 도메인이 존재하는지 실제로 소유하고 있는지 확인
- 인증서 발급 : 소유권이 확인되면 해동 도메인에 대해서 SSL/TLS를 발급
- 인증서 설치 및 갱신 : 발급된 인증서는 자동으로 웹서버에 설치되며, 인증서의 유효 기간(보통 90)이 만료되기 전에 자동 갱신
인증서 발급 방법
필자는 Windows10 pro, aws Linux 기준으로 작성되었습니다.
1. SSH 서버로 접속합니다.
저는 Mobaxterm를 사용 중이니 다운 방법이 궁금하시면 다음 글을 통해 설치해주시면 될 것 같습니다.
MobaXterm 다운 방법
MobaXterm 다운하기 MobaXterm란? MobaXterm은 Windows 운영 체제에서 사용할 수 있는 다목적 원격 접속 및 시스템 관리 도구이다. 이 프로그램은 SSH, RDP, X11, SFTP 등 다양한 프로토콜을 지원하여 원격 서버
back-stead.tistory.com
2. Cerbot을 설치합니다.
sudo yum install certbot
3. 인증 방법 선택
인증서를 발급받기 옵션에는 여러 가지가 존재합니다, --standalone , --webroot ,--apache 등등 여러 가지가 존재하지만, 스프링 서버에서 적용할 인증서를 발급받는 거기 때문에 --standalone 을 사용해 독립 실행을 하여 웹서버의 소유권을 확인해 인증서를 발급받을 것입니다.
sudo certbot certonly --standalone
실행 후 발급받은 도메인과, 이메일 주소를 입력하고 나면 정상적은 도메인을 가진 경우라면
/etc/letsencrypt/live/도메인/ 경로에 fullcahin.pem과 privkey.pem 가 발급되었다고 안내합니다.
4. keyStore 발급
스프링 부트에서 https를 사용하려면 이전에 발급받았던 pem 방식이 아닌 keySotre 방식으로 사용해야 합니다. 그래서 아래 명령어를 통해 keySotre 파일을 생성해야 합니다. 인증서가 발급된 디렉터리로 이동해 아래 명령어를 실행해 줍니다.
그럼 비밀번호를 입력하고 나면 keystore.12 파일이 생성된 것을 볼 수 있습니다.
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root
5. keystore 로컬에 다운로드
이제 발급받은 keystore.12 인증서를 로컬에 다운로드하아야 합니다. 필자는 윈도를 사용하고 있어 아래 명령어를 통해 ssh 서버의 데이터를 다운로드하였습니다.
PowerShell을 실행하여 아래 명령어를 통해 파일을 다운로드하여줍니다.
scp -i [AWS PEM 경로] [사용자명]@[EC2_IP주소]:[keystore.12가 저장된 파일경로] [로컬에 다운 받을 경로]
6. 스프링 부트 적용
resources의 파일을 저장하고, yaml파일아 다음과 같이 작성해 줍니다.
server:
ssl:
key-store: classpath:ssl/keystore.p12
key-store-type: PKCS12
key-store-password: 변환후입력헀던비밀번호
port: 8443
그 후 AWS에서 Spring 서버를 실행해 줍니다.
결과
인증서가 올바르게 발급되어 실행되는 것을 볼 수 있습니다.
Reference
Let's Encrypt
Jun 24, 2024 NTP is critical to how TLS works, and now it’s memory safe at Let’s Encrypt. Read more May 30, 2024 Increasing defense against BGP attacks thanks to support from the Open Technology Fund. Read more May 1, 2024 Takeaways from Tailscale’s
letsencrypt.org
SSL 인증서란 무엇인가요? - SSL/TLS 인증서 설명 - AWS
SSL/TLS 인증서란 무엇입니까? SSL/TLS 인증서는 시스템에서 ID를 확인하고 이후에 Secure Sockets Layer/전송 계층 보안(SSL/TLS) 프로토콜을 사용하여 다른 시스템에 대한 암호화된 네트워크 연결을 설정할
aws.amazon.com
'Spring > SpringBoot' 카테고리의 다른 글
[SpringBoot] @Qualifier 사용하기 (0) | 2024.06.18 |
---|---|
[SpringBoot] SSE를 이용한 실시간 알림 구현하기! (0) | 2024.06.13 |
[SpringBoot] Custom @Vailid 어노테이션 만들기 (0) | 2024.05.10 |
[Spring-Boot] Srpingdoc OpenApi 스웨거(Swagger) 사용하기 (0) | 2024.04.24 |
[SpringBoot] 스프링 클라우트 볼트(Vault)를 활용하여 정보관리 (1) | 2024.01.04 |