프로젝트에서 안드로이드와 서버 api 연결 과정에서 SSL 설정이 권장되고, 설정하지 않는 경우 연결이 가능하도록 코드를 추가해 불안정하게 연결하여야 한다고 하여 SSL를 적용하게 되었다.


1. SSL(Secure Sockets Layer)이란?

  • SSL (Secure Sockets Layer)
    • 웹 서버와 클라이언트의 통신 암호화 프로토콜
    • SSL이 적용되면 통신 패킷이 탈취되어도 복호화 키 없이는 데이터를 확인할 수 없음
  • HTTPS (HyperText Transfer Protocol Secure)
    • 텍스트 교환인 HTTP(HyperText Transfer Protocol) 통신의 보안 문제를 보완하는 프로토콜
    • SSL 프로토콜을 이용해 텍스트를 공개키 암호화 방식으로 암호화함


2. SSL 설정하기

1) EC2 환경 세팅

  • 80번 포트를 사용하고 있는 경우 중지

      docker stop [컨테이너 ID]
    
  • nginx 설치

      sudo apt update
      sudo apt install nginx
    
  • 방화벽에서 필요한 포트 열기 : 22, 80, 443

      sudo ufw allow [포트]
      sudo ufw enable # 방화벽 적용
      sudo ufw status # 허용 포트 확인
    
    • port 22 : ssh
    • port 80 : http
    • port 443 : https
  • nginx 상태 확인

      systemctl status nginx
    


2) 서버 설정

  • 리버스 프록시 설정

      sudo vi /etc/nginx/sites-available/[서버 이름]
    
      server {
        
               listen 80;
               listen [::]:80;
        
          server_name [서버 이름] [서버 도메인];
        
              location / {
                      proxy_pass http://127.0.0.1:[포트 번호]; # 프록시 연결을 하고자 하는 포트 번호
      								proxy_set_header Host $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;
              }
        
      }
    
    • location의 /로 들어온 요청을 proxy_pass의 http://127.0.0.1:[포트 번호]로 보냄

    💡 context path가 설정되어있다면 location에 같이 설정

  • Nginx 가상 호스트 활성화

      sudo ln -s /etc/nginx/sites-available/[서버 이름] /etc/nginx/sites-enabled/
    
    • sites-available/[서버 이름] 설정 파일에 대한 심볼릭 링크를 sites-enabled에 생성하여 Nginx는 해당 가상 호스트 설정을 활성화
    • /etc/nginx/sites-available/[서버 이름] : [서버 이름]인 가상 호스트의 설정 파일이 위치한 경로. 활성화되지 않은 상태
    • /etc/nginx/sites-enabled/ : 활성화된 가상 호스트 설정 파일들이 위치하는 디렉토리
  • Nginx에서 서버 이름을 저장하는 해시 테이블의 크기를 지정하는 설정

      sudo vi /etc/nginx/nginx.conf
      # server_names_hash_bucket_size 64; # 이 부분의 주석을 해제
    
    • 주석 처리된 상태에서는 Nginx가 자동으로 적절한 크기를 선택
  • Nginx 설정 파일 테스트

      sudo nginx -t
    

  • Nginx 설정 적용을 위해 restart

      sudo systemctl restart nginx
    
    • Nginx 설정을 변경하는 경우 항상 restart


3) SSL 설정

  • 스냅 코어 패키지를 설치

      sudo snap install core; sudo snap refresh core
    
    • 스냅 : Linux 소프트웨어 패키지의 형식
  • 기존 certbot 제거 후 재설치

      sudo apt remove certbot
      sudo snap install --classic certbot
    
  • SSL 설정

      sudo certbot --nginx -d [서버 도메인]
    
  • SSL 설정 완료!



참고 자료

Leave a comment