안녕하세요! 오늘은 네이버 클라우드 환경에서 Let's Encrypt를 사용하여 SSL 인증서를 발급받고 HTTPS를 구현하는 방법에 대해 공유하려고 합니다. 이 과정에서 nginx, certbot, 프록시 서버 설정 등 다양한 기술을 사용했는데, 이를 통해 얻은 경험과 해결한 문제들을 여러분과 나누고자 합니다.
HTTP vs HTTPS: 왜 HTTPS를 사용해야 하는가?
현재 크롬에서는 "onlyhttps"는 기본적으로 활성화되어 있기때문에
버셀로 구축한 프론트는 https가 자동으로 배포가 되어있어서 서버가 https가 아닌경우에는
통신이 이루어지지않습니다.
이를 무시하고 백엔드가 HTTP를 사용하면 "Mixed Content" 상황이 발생하며, 다음과 같은 심각한 보안 이슈가 생길 수 있습니다:
HTTP 통신은 암호화되지 않아 데이터가 평문으로 전송됩니다.
공격자가 네트워크 트래픽을 가로채 민감한 정보를 훔칠 수 있습니다.
HTTP 통신은 변조 감지 메커니즘이 없어, 전송 중 데이터 변경을 확인하기 어렵습니다.
공격자가 악의적인 코드나 잘못된 정보를 주입할 수 있습니다.
암호화되지 않은 세션 쿠키나 토큰이 노출될 수 있습니다.
공격자가 이를 이용해 사용자의 세션을 탈취하고 권한을 얻을 수 있습니다.
이러한 이유로, 프론트엔드와 백엔드 모두 HTTPS를 사용하는 것이 매우 중요합니다. 전체 통신 과정을 암호화함으로써 데이터의 기밀성, 무결성, 그리고 사용자의 프라이버시를 보호할 수 있습니다.
저는 네이버 클라우드를 사용해서 서버를 배포했고 각 dns와 acg, 네임서버에 대한 입력값을 세팅해줘야됩니다
사용하게될 포트 전부 acg에 입력해주면됩니다!
모든 포트에 대해 접근 소스가 0.0.0.0/0으로 설정되어 있어, 모든 IP에서의 접근을 허용하고 있습니다.
저같은 경우는 godaddy에 도메인을 구입했습니다
도메인 구매 사이트에서 다음 네임서버를 설정해야 합니다
이같이 네이버 클라우드와 DNS, 네임서버에 대한 세팅 끝났습니다.
이제 ssh서버에 진입해서 nginx와 certbot, 프록시를 설정해주면됩니다
nginx란 고성능 웹 서버이자 리버스 프록시 서버 세팅이 가능한 모듈입니다
certbot을 연결해 Let's Encrypt SSL/TLS 인증서를 발급할 수 있습니다.
3.1 nginx 설치 및 설정
sudo apt update
sudo apt install nginx
//nginx 설정진입 명령어
sudo nano /etc///nginx/sites-available/default
server {
listen 80;
server_name your_domain.com www.your_domain.com;
# 추가 설정...
}
//https는 443 포트이며 포트:3000을 프록시 설정하면
//도메인 입력시 도메인:3000으로 이동
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
location / {
proxy_pass http://localhost:3000; # Node.js 서버 포트
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
원인: nginx가 80포트 사용 중
해결: sudo systemctl stop nginx 후 certbot 실행
원인: 프록시 설정 오류
해결: nginx 설정 파일에서 proxy_pass 지시어 확인 및 수정
문제: 외부에서 서버 접근 불가
해결: ACG에서 필요한 포트 개방 확인
결론
네이버 클라우드 환경에서 Let's Encrypt를 이용한 HTTPS 구현은 여러 단계와 주의사항이 필요합니다. nginx, certbot, 프록시 설정, ACG 관리 등 다양한 요소를 고려해야 하지만, 이를 통해 안전하고 신뢰할 수 있는 웹 서비스를 제공할 수 있습니다