Nginx에 SSL 인증서를 설정하여 HTTPS 프로토콜로 웹사이트 보안 강화하기

박병현·2024년 6월 2일
0

Nginx에 SSL 인증서를 설정하여 HTTPS 프로토콜로 웹사이트 보안 강화하기

1. HTTPS란?

HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 프로토콜을 추가하여 웹사이트와 사용자의 브라우저 간에 안전한 통신을 보장합니다. HTTPS를 통해 전송되는 데이터는 암호화되어 중간에 도청이나 변조되는 것을 방지합니다.

1.1 HTTPS와 HTTP의 차이점

HTTP(HyperText Transfer Protocol):

  • 보안: HTTP는 데이터 전송 중에 암호화되지 않으므로 도청과 변조에 취약합니다.
  • 포트: 기본적으로 80번 포트를 사용합니다.
  • 인증: 클라이언트와 서버 간의 신뢰 관계를 설정하지 않으므로 피싱 공격에 취약합니다.

HTTPS(HyperText Transfer Protocol Secure):

  • 보안: HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화합니다. 이를 통해 전송 중에 데이터를 도청하거나 변조하는 것을 방지합니다.
  • 포트: 기본적으로 443번 포트를 사용합니다.
  • 인증: 서버는 인증서를 통해 자신의 신원을 증명할 수 있으며, 클라이언트는 이 인증서를 검증하여 신뢰성을 확인할 수 있습니다.

1.2 HTTPS의 주요 기능

  • 암호화: 데이터 전송 중에 데이터를 암호화하여 도청을 방지합니다.
  • 데이터 무결성: 데이터가 전송 중에 변경되지 않도록 합니다.
  • 인증: 서버가 신뢰할 수 있는지 확인할 수 있습니다.

1.3 HTTPS가 안전한 이유

HTTPS는 세 가지 주요 보안 계층을 제공합니다: 암호화, 데이터 무결성, 인증.

암호화

클라이언트와 서버 간의 통신은 TLS(Transport Layer Security) 프로토콜을 사용하여 암호화됩니다. TLS는 세션 키를 사용하여 데이터를 암호화하며, 이 키는 클라이언트와 서버 간의 핸드셰이크(handshake) 과정에서 교환됩니다. 이 과정은 다음과 같이 이루어집니다:

  1. Client Hello: 클라이언트는 서버에 연결 요청을 보내며, 사용할 수 있는 TLS 버전과 암호화 방식(cipher suites)을 제안합니다.
  2. Server Hello: 서버는 제안된 옵션 중에서 선택한 TLS 버전과 암호화 방식을 클라이언트에 알립니다.
  3. 서버 인증(Server Authentication): 서버는 자신의 인증서를 클라이언트에 보냅니다. 이 인증서는 CA(인증 기관)가 서명한 것이며, 클라이언트는 이를 통해 서버의 신뢰성을 검증합니다.
  4. 키 교환(Key Exchange): 서버와 클라이언트는 세션 키를 교환합니다. 이 키는 대칭 키 암호화를 위해 사용됩니다.
  5. 암호화된 연결(Encrypted Connection): 이후의 통신은 세션 키를 사용하여 암호화됩니다.

데이터 무결성

TLS는 데이터가 전송 중에 변경되지 않았음을 보장하기 위해 메시지 인증 코드(MAC)를 사용합니다. 데이터가 도착하면 클라이언트와 서버는 데이터가 변조되지 않았는지 확인합니다.

인증

서버 인증서는 클라이언트가 서버의 신원을 확인할 수 있도록 합니다. 인증서는 신뢰할 수 있는 CA(인증 기관)가 서명한 것입니다. 클라이언트는 이 인증서를 검증하여 중간자 공격(man-in-the-middle attack)을 방지할 수 있습니다.

2. SSL이란?

SSL(Secure Sockets Layer)은 인터넷을 통한 데이터 전송의 보안을 보장하기 위해 사용되는 표준 보안 기술입니다. 현재 SSL의 후속 버전인 TLS(Transport Layer Security)가 주로 사용됩니다.

2.1 SSL/TLS의 역할

  • 암호화: 데이터를 암호화하여 전송합니다.
  • 인증: 서버와 클라이언트의 신원을 확인합니다.
  • 무결성: 데이터가 전송 중에 변경되지 않도록 합니다.

3. HTTPS로 보안 강화

웹사이트에 HTTPS를 적용하면 사용자와 서버 간의 통신이 안전하게 이루어집니다. HTTPS를 통해 데이터 유출이나 피싱 공격을 방지할 수 있습니다. HTTPS를 적용하기 위해서는 SSL/TLS 인증서가 필요합니다.

4. SSL 인증서 발급 방법

SSL 인증서는 무료와 유료로 발급받을 수 있습니다.

4.1 무료 인증서

  • Let's Encrypt: 무료 SSL 인증서를 제공하는 기관으로, 자동화된 방식으로 인증서를 발급하고 갱신할 수 있습니다.

4.2 유료 인증서

  • 유료 인증서: Comodo, DigiCert, Symantec 등과 같은 인증 기관에서 유료로 발급받을 수 있습니다. 유료 인증서는 무료 인증서에 비해 더 높은 신뢰성과 추가적인 보안 기능을 제공할 수 있습니다.

5. Nginx에 SSL 인증서 설정하기

Nginx에 SSL 인증서를 설정하여 HTTPS를 적용하는 방법을 설명합니다. 아래 예제에서는 인증서 파일과 키 파일을 설정합니다.

5.1 Nginx 설정 예제

# nginx.conf
server {
    listen 443 ssl;  # 443 포트에서 SSL을 사용하여 연결을 수신합니다.
    server_name example.com;  # 서버의 도메인 이름을 설정합니다.

    ssl_certificate /etc/ssl/certs/example_com_cert.crt;  # SSL 인증서 파일의 경로를 지정합니다.
    ssl_trusted_certificate /etc/ssl/certs/example_com_chain_cert.crt;  # 인증서 체인 파일의 경로를 지정합니다.
    ssl_certificate_key /etc/ssl/private/example_com.key;  # SSL 인증서 키 파일의 경로를 지정합니다.
    ssl_protocols TLSv1.2 TLSv1.3;  # 최신 TLS 버전만 사용
    ssl_ciphers HIGH:!aNULL:!MD5;  # 안전한 암호화 스위트 사용

    client_max_body_size 0;  # 클라이언트가 전송할 수 있는 최대 요청 본문 크기를 설정합니다.

    location /static/ {
        alias /srv/static/;  # 정적 파일의 경로를 설정합니다.
    }
}
  • /etc/ssl 경로는 서버에서 SSL/TLS 인증서와 키 파일을 보관하는 표준 위치
  • cp, FileZila등을 통해 발급받은 인증서를 위 위치로 옮겨야함
profile
AI Application Engineer

0개의 댓글