원래 AWS Certificate Manager(ACM)은 API Gateway, CloudFront, ALB 등 AWS 서비스에만 사용 가능했다.
근데 내보내기 가능한 공인 인증서 기능이 업데이트 되어서 nginx에 ACM에서 발급 받은 인증서를 적용해보겠다.
대부분 블로그는 api 이용해서 인증서 다운 받은 걸 바로 적용하길래 순수 어떻게 적용하는 건지 알아보자.
ACM 공인 인증서 관련 내용은 여기로 -> https://engine.tistory.com/184
AWS Certificate Manager 공인 인증서 개념, 발급방법
ACM 공인 인증서AWS Certificate Manager 신기능, 어디서나 사용할 수 있는 공개 인증서가 출시되었다.2025년 6월 17일, AWS에서 어디에서나 사용할 수 있는 AWS Certificate Manager (ACM) 공개 인증서를 업데이트
engine.tistory.com
테스트 환경
- EC2 : Amazon Linux 2023
- 네트워크 : 인터넷 게이트웨이와 연결된 Public Subnet
테스트 방법
1. nginx 설치하기
sudo apt update && sudo apt install nginx -y
2. SSL 인증서 저장
# SSL 디렉터리 생성
sudo mkdir -p /etc/nginx/ssl
# 다운로드한 인증서/키 복사
sudo cp ~/Downloads/certificate.pem /etc/nginx/ssl/
sudo cp ~/Downloads/certificate_chain.pem /etc/nginx/ssl/
sudo cp ~/Downloads/private_key.pem /etc/nginx/ssl/
3. nginx HTTPS 설정
- site-available 폴더에 사용할 도메인 이름으로 된 파일을 생성한다
sudo mkdir /etc/nginx/site-available
sudo nano /etc/nginx/sites-available/DOMAIN.kro.kr
4. DOMAIN.kro.kr 파일에 다음 내용을 입력한다.
server {
listen 443 ssl;
server_name DOMAIN.kro.kr;
ssl_certificate /etc/nginx/ssl/certificate.pem;
ssl_certificate_key /etc/nginx/ssl/private_key.pem;
ssl_trusted_certificate /etc/nginx/ssl/certificate_chain.pem;
location / {
root /var/www/html;
index index.html;
}
}
server {
listen 80;
server_name DOMAIN.kro.kr;
return 301 https://$host$request_uri;
}
5. nginx.conf 파일을 변경한다. 이 conf 파일에 site-enabled 폴더의 심볼링 링크를 적용할 수 있도록 해준다.
27번째 줄만 추가해줘도 괜찮다.
sudo nano /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*; << 추가
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
6. 심볼릭 링크 생성 및 nginx 재시작 해준다.
sudo ln -s /etc/nginx/sites-available/test.kro.kr /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
만약, pem키가 필요하다고 하면 ACM 인증서 발급받을 때 설정한 비밀번호를 입력하면 된다.
만약 인증서가 암호화 되어서 nginx 적용이 불가능하다거나 하면 다음 명령을 이용해 pem 파일의 암호화를 해제한다.
이때에도 동일하게 pem 파일의 비밀번호를 입력해야한다.
* 파일이름이 바뀌면 4번에서 파일이름을 변경해주는 것 잊지말자 *
sudo openssl rsa -in /etc/nginx/ssl/private_key.pem -out /etc/nginx/ssl/private_key_decrypted.pem
7. 그러면 nginx에 도메인 적용이 되고, 암호화된 통신이 가능해진다!
ACM에서 여러 활용이 가능한 기능이 나온 것 같아 도움이 많이 될 것 같다 !
'AWS' 카테고리의 다른 글
AWS CodeBuild, CodePipeline Gitlab 소스 연동 오류 (1) | 2025.08.21 |
---|---|
AWS Certificate Manager 공인 인증서 개념, 발급방법 (0) | 2025.08.20 |
Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain 이슈 (2) | 2025.07.16 |
AWS IoT SiteWise Portal 삭제 이슈 해결방법 (0) | 2025.04.17 |
AWS IoT Core에서 Topic 제약 없이 사용하는 방법 (0) | 2025.01.06 |