도메인 적용 부터 https로 전환하기

업데이트:


| 도메인 적용 부터 https로 전환하기

1. 도메인 적용하기

1) 도메인 구입:
도메인 구매를 검색해서 나오는데가 가비아이기도 하고, 카페24 등등 다양한 곳에서 구입할 수 있습니다.


2) AWS Route 53 도메인 연결:

a. AWS 콘솔 로그인
b. Route 53 서비스로 이동
c. “Hosted zones” 클릭
d. “Create hosted zone” 클릭
e. 구입한 도메인 이름 입력 및 생성
f. 생성된 hosted zone에서 NS(Name Server) 레코드 확인


3) 도메인 등록 업체에서 네임서버 변경:

a. 도메인 구입 업체에서 네임서버 변경 페이지로 이동
b. AWS Route 53에서 확인한 NS레코드값으로 1차,2차,3차,4차 네임서버 정보 입력 입력


4) Route 53에서 ec2 연결:

a. Route 53 서비스에서 hosted zone 선택
b. “Create record” 클릭
c. “A” 레코드 생성
     Record type: A - IPv4 address d.Value에 EC2 인스턴스의 퍼블릭 IP 입력 e. “Create records” 클릭


5) EC2 보안 그룹 설정:

a. EC2 인스턴스의 보안 그룹 설정
b. 인바운드 규칙 추가
c. 포트 80, 443 열기


6) Nginx 설정 파일 수정:


events {
    worker_connections 1024;
}

http {
    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl;
        server_name yourdomain.com www.yourdomain.com;

        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

        location / {
            proxy_pass http://app:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}


7) init-letsencrypt.sh 파일 수정:

#!/bin/bash

domains=(yourdomain.com www.yourdomain.com)
rsa_key_size=4096
data_path="./data/certbot"
email="your-email@example.com" # SSL 인증서 발급 시 사용할 이메일 주소

# ... (스크립트의 나머지 부분)`


8)ssl 인증서 발급 및 Docker실행:

chmod +x init-letsencrypt.sh
sudo ./init-letsencrypt.sh
docker-compose up -d

2. HTTPS를 적용하는 이유

1) 보안성 강화:
HTTPS는 데이터를 암호화하여 전송하므로, 중간에 데이터를 가로채더라도 내용을 해독할 수 없습니다. 이는 민감한 정보 교환 시 보안을 크게 향상시킵니다.


2) 신뢰성 확보:
SSL/TLS 인증서를 통해 서버의 신원을 확인할 수 있어, 사용자가 접속한 웹사이트의 신뢰성을 보장받을 수 있습니다.


3) 검색 엔진 최적화(SEO) 개선:
Google 등의 주요 검색 엔진은 HTTPS를 적용한 웹사이트에 더 높은 순위를 부여합니다. 이는 웹사이트의 가시성과 트래픽 증가로 이어질 수 있습니다.


4) 쿠키 보안 강화:
HTTPS는 쿠키를 암호화하여 전송하기 때문에, 중간자 공격으로부터 사용자의 세션 정보를 보호할 수 있습니다.


5) 브라우저 호환성 및 성능 향상:
최신 브라우저들은 HTTPS를 적용한 웹사이트에 대해 다양한 최적화를 제공하며, 이는 더 나은 사용자 경험으로 이어집니다.


6) HTTP/2 프로토콜 지원:
HTTP/2는 HTTPS 환경에서만 완전히 지원되며, 이를 통해 웹페이지 로딩 속도를 크게 개선할 수 있습니다.

7) 데이터 무결성 보장:
HTTPS는 데이터 전송 중 변조를 방지하여, 사용자가 원본 그대로의 정보를 받을 수 있도록 보장합니다.

2. 설치 과정

1) Certbot 설치:
EC2 인스턴스에 직접 Certbot을 설치합니다.

sudo apt-get update
sudo apt-get install certbot


2) SSL 인증서 발급:

sudo certbot certonly --standalone -d domain.com


3) 인증서 파일 위치 확인:
/etc/letsencrypt/live/domain.com/ 디렉토리에 저장됨.

sudo certbot certonly --standalone -d domain.com


4) Nginx 설정 파일 수정 (nginx/nginx.conf):

# 이벤트 블록: Nginx의 전반적인 연결 처리 방식을 설정합니다.
events {
    # 워커 프로세스가 동시에 처리할 수 있는 최대 연결 수를 설정합니다.
    worker_connections 1024;
}

# HTTP 블록: 웹 서버 관련 설정을 정의합니다.
http {
    # 첫 번째 서버 블록: HTTP(80포트)로 들어오는 요청을 HTTPS로 리다이렉트합니다.
    server {
        # 80번 포트(HTTP)로 들어오는 연결을 수신합니다.
        listen 80;
        # 이 서버 블록이 처리할 도메인 이름을 지정합니다.
        server_name domain.com;
        # HTTP로 들어온 모든 요청을 HTTPS로 영구 리다이렉트(301)합니다.
        return 301 https://$server_name$request_uri;
    }

    # 두 번째 서버 블록: HTTPS 연결을 처리합니다.
    server {
        # 443번 포트(HTTPS)로 들어오는 SSL/TLS 연결을 수신합니다.
        listen 443 ssl;
        # 이 서버 블록이 처리할 도메인 이름을 지정합니다.
        server_name domain.com;

        # SSL 인증서 파일의 경로를 지정합니다.
        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        # SSL 개인 키 파일의 경로를 지정합니다.
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

        # 루트 위치 블록: 모든 요청에 대한 처리를 정의합니다.
        location / {
            # 들어온 요청을 내부의 app 서비스의 8080 포트로 전달합니다.
            proxy_pass http://app:8080;
            # 원본 요청의 Host 헤더를 프록시 요청에 포함시킵니다.
            proxy_set_header Host $host;
            # 클라이언트의 실제 IP 주소를 프록시 요청에 포함시킵니다.
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}


5) Docker Compose 파일 수정 (docker-compose.yml):

services:
  app:
    image: ${IMAGE}
    expose:
      - "8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
    env_file:
      - .env

  nginx:
    build: ./nginx
    ports:
      - "80:80" -> 80포트를 443포트로 리다이렉트
      - "443:443" -> 443포트로 SSL 연결 수신
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt:ro
    depends_on:
      - app


6) 인증서 자동 갱신 설정:
crontab에 다음 라인을 추가합니다.

  sudo crontab -e
  0 12 * * * /usr/bin/certbot renew --quiet

참고사이트



댓글남기기