이번 포스팅은 AWS와 nginx를 통해 인증서를 적용시키는 예제 입니다.
최근 보안의 중요성이 커져서 https가 아니면 지원이 안되는 서비스들이 늘어나고 있습니다. (예를 들면 페이스북)
그에 맞게 인증서를 발급받아 적용시키는게 미래를 위해서 좀 더 편할 수 있습니다.
인증서는 무료 인증서인 Letsencrypt를 사용합니다. 인증서를 발급받기 위해서는 퍼블릭 도메인을 꼭 가지고 있어야 합니다. (IP로만 접근 안됨)
우선 워크 플로우는 아래와 같습니다.
1. SSL 인증서 발급
2. 설정 파일에서 443 포트를 기본으로 설정
3. 발급받은 인증서를 탑재
4. 80포트로 들어오는 연결을 443으로 리다이렉트 할 수 있도록 설정
기본적인 개념은 톰캣이 직접 https 요청을 처리하는 것이 아니라, 443 포트로 들어오는 https 요청을 nginx가 모두 처리하고, 톰캣은 내부적으로 리다이렉트되는 http 요청을 2000포트로 리슨하여 처리하는 것이 핵심입니다.
1. letsencrypt 설치
sudo apt update -y & sudo apt install letsencrypt -y
2. NGINX 중지
sudo systemctl stop nginx
3. 인증서 발급
sudo letsencrypt certonly --standalone -d www.yourdomain.com
발급 완료되면 다음과 같은 화면이 뜨고 인증서가 저장된 위치가 뜹니다. 7우얼31일까지 사용할 수 있고 더 상ㅇ하려면 다음 명령어를 사용해야합니다.
certbot renew
4. nginx 설정 파일 설정
/etc/nginx/sites-available의 default와 devcrews 설정 예시입니다. 80번 포트와 443번 포트가 하는 것을 분리해야합니다.
default 설정에서는 80번 포트로 오는 것을 443(https)로 redirect해주는 역할을 합니다.
server {
listen 80;
server_name devcrews.io;
return 301 https://$host$request_uri;
}
다음은 devcrews 설정 예시입니다.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name devcrews.io;
ssl_certificate "/etc/letsencrypt/live/devcrews.io/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/devcrews.io/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:2000;
proxy_redirect off;
charset utf-8;
}
}
5. nginx 재시작
sudo service nginx restart
6. 인증서 갱신
1. nginx 잠깐 꺼두기
systemctl stop nginx
2. certbot 갱신 실행
갱신테스트 : certbot renew --dry-run
실제 갱신 : certbot renew
인증서 만료 확인 : certbot certificates
사이트 : https://devlog.jwgo.kr/2019/04/16/how-to-lets-encrypt-ssl-renew/
'Server' 카테고리의 다른 글
[Server] Nginx 설치 및 프록시 서버 구성하기 (0) | 2020.03.08 |
---|