[AWS] EC2 무료 SSL/TLS(HTTPS)적용 방법 (Apache Tomcat, Spring Boot 내장 Tomcat 적용) - Let's Encrypt (Certbot)
따로 운영 중인 서비스의 경우 HTTP 통신으로 사용 중이었는데,
구글이나 애플 서비스를 이용해야 되다 보니 HTTPS 통신이 불가피하게 되었다.
SSL 인증서 적용하는 방법 중 유료가 아닌 무료로 적용할 수 있는 방법에 대해 알게 되어
Let's Encrypt를 사용하여 AWS EC2에서 SSL 인증서 적용하는 방법을 공유하려고 한다.
Let's Encrypt는 SSL/TLS 인증서를 제공하는 비영리 인증 기관으로
유료로 SSL 인증서를 구매하는 것이 HTTPS 보급에 방해가 된다고 생각해서
무료로 HTTPS를 보급하려고 만들었다고 한다.
1. Certbot 설치
1-1. EPEL(Extra Packages for Enterprise Linux) 저장소 활성화
EPEL은 CentOS나 다른 파생 배포판을 위한 패키지 저장소로 많은 소프트웨어 패키지를 제공하고 있다.
Let's Encrypt에서 제공하는 Certbot을 사용하기 위해서는
EPEL 저장소를 활성화하는 것이 필수다.
(버전에 따라 epel-release-latest-7.noarch.rpm, epel-release-latest-8.noarch.rpm 등 선택)
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
활성화 확인하는 명령어는 다음과 같다.
sudo yum repolist
[출력]
repo id repo name status
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,565+226
1-2. Certbot 설치
sudo yum install -y certbot
2. Certbot으로 SSL 인증서 받기
2-1. Certbot 플러그인 설치
Apache를 위한 플러그인
sudo yum install -y python2-certbot-apache
Nginx를 위한 플러그인
sudo yum install -y python2-certbot-nginx
2-2. SSL 인증서 받기
아파치 톰캣에 SSL/TLS 인증서를 설정하는 명령어로
아파치 웹 서버 구성을 자동으로 업데이트한다.
sudo certbot --apache
아파치 웹 서버 구성을 수동으로 설정하는 경우 아래와 같이 한다.
sudo certbot --apache certonly
스프링부트 내장 톰캣에 사용하기 위한 SSL 인증서를 얻는 명령어다.
[URL] 부분에 도메인을 입력하면 된다.
sudo certbot certonly --standalone -d [URL]
[예제]
sudo certbot certonly --standalone -d test.co.kr
인증서 갱신이 필요하단 메일을 수신받을 이메일주소를 입력하면 된다.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):
동의해 주자.
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
openssl을 사용해서 pkcs12 형식의 인증서 및 개인키를 만든다.
아래 명령어를 입력하면 비밀번호를 입력하라는 프롬프트가 나오는데
설정하고자 하는 비밀번호를 입력하면 된다.
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name [URL] -CAfile chain.pem -caname root
[예제]
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name test.co.kr -CAfile chain.pem -caname root
위 내용을 완료하면 /etc/letsencrypt/live/[URL] 경로 및 파일들이 생성된 것을 확인할 수 있다.
3. 톰캣에 SSL/TLS 인증서 적용 (스프링부트 내장 톰캣)
3-1. 톰캣 SSL 적용
/home/tomcat/apache-tomcat-9.0.80/conf/server.xml
톰캣 설치 경로에서 server.xml 파일을 수정한다.
certificateKeystoreFile 값에는 keystore 경로를 넣어주고
certificateKeystorePassword 값에는 비밀번호를 넣어준다.
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/etc/letsencrypt/live/test.co.kr/keystore.p12"
certificateKeystoreType="PKCS12"
certificateKeystorePassword="1234" />
</SSLHostConfig>
</Connector>
/home/tomcat/apache-tomcat-9.0.80/conf/web.xml
톰캣 설치 경로에서 web.xml 파일을 수정한다.
<security-constraint>
<web-resource-collection>
<web-resource-name>Secured Content</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
3-2. 스프링부트 설정
application.yml에서 인증서 관련 설정을 한다.
key-store 부분에 keystore 경로를 넣고
key-store-password 부분은 위에서 설정한 비밀번호를 넣어준다.
server:
port: 443
ssl:
key-store-type: PKCS12
key-store: /etc/letsencrypt/live/test.co.kr/keystore.p12
key-store-password: 1234
key-alias: test.co.kr
만약 443 포트 말고 80 포트도 사용해야 하는 경우도 있을 텐데
개발, 운영 환경에서는 80, 443 포트 모두 사용하도록 설정했다.
package com.deepit.stock.config;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
@Configuration
public class TomcatConfig {
@Autowired
private Environment environment;
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
if (
"real".equals(environment.getProperty("spring.profiles.active")) ||
"dev".equals(environment.getProperty("spring.profiles.active"))
) {
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
}
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(80);
return connector;
}
}
4. 서버 재시작
위 설정대로 다 마쳤다면 SSL/TLS 인증서 적용이 완료되었다.
이제 서버를 재시작해서 실제 적용이 잘 되었는지 확인해 보자.
그리고 Let's Encrypt는 3개월마다 갱신을 해야 한다.
sudo certbot renew
리눅스 크론탭을 사용해서 자동으로 갱신하도록 설정할 수도 있다.
crontab -e
매일 0시 0분에 인증서를 자동갱신하도록 추가했다.
0 0 * * * python -c ‘import random; import time; time.sleep(random.random() * 3600)’ && certbot renew
Let's Encrypt를 사용하여 EC2에서 Apache Tomcat에 무료 SSL/TLS 적용을 해봤는데
처음 해보는 작업이었지만 어렵지 않게 성공할 수 있었다.
Nginx SSL/TLS 인증서 적용하여 HTTPS로 리다이렉트까지 하는 방법
주식투자에 흥미가 있으신가요?
저는 '디핏'앱을 통해 정보를 얻고 있습니다.
여러분도 경험해 보세요!
'개발 이야기 > AWS (Amazon Web Services)' 카테고리의 다른 글
[AWS] EC2 Abuse Report 대응 및 해결 방법 - AWS EC2 Instance Connect (0) | 2024.01.25 |
---|---|
[AWS] EC2 NGINX에 무료 SSL/TLS 적용하고 HTTPS로 리다이렉트(Redirect) 하기 - Let's Encrypt (Certbot) (0) | 2024.01.16 |
[AWS] EC2 NGINX 설치하고 Config설정 및 배포하기 (0) | 2024.01.16 |
[AWS] EC2에서 Node.js, npm, yarn 패키지 설치하는 방법 (nvm) (1) | 2023.12.06 |
댓글
이 글 공유하기
다른 글
-
[AWS] EC2 Abuse Report 대응 및 해결 방법 - AWS EC2 Instance Connect
[AWS] EC2 Abuse Report 대응 및 해결 방법 - AWS EC2 Instance Connect
2024.01.25 -
[AWS] EC2 NGINX에 무료 SSL/TLS 적용하고 HTTPS로 리다이렉트(Redirect) 하기 - Let's Encrypt (Certbot)
[AWS] EC2 NGINX에 무료 SSL/TLS 적용하고 HTTPS로 리다이렉트(Redirect) 하기 - Let's Encrypt (Certbot)
2024.01.16 -
[AWS] EC2 NGINX 설치하고 Config설정 및 배포하기
[AWS] EC2 NGINX 설치하고 Config설정 및 배포하기
2024.01.16 -
[AWS] EC2에서 Node.js, npm, yarn 패키지 설치하는 방법 (nvm)
[AWS] EC2에서 Node.js, npm, yarn 패키지 설치하는 방법 (nvm)
2023.12.06