HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 프로토콜을 추가하여 웹사이트와 사용자의 브라우저 간에 안전한 통신을 보장합니다. HTTPS를 통해 전송되는 데이터는 암호화되어 중간에 도청이나 변조되는 것을 방지합니다.
HTTP(HyperText Transfer Protocol):
HTTPS(HyperText Transfer Protocol Secure):
HTTPS는 세 가지 주요 보안 계층을 제공합니다: 암호화, 데이터 무결성, 인증.
클라이언트와 서버 간의 통신은 TLS(Transport Layer Security) 프로토콜을 사용하여 암호화됩니다. TLS는 세션 키를 사용하여 데이터를 암호화하며, 이 키는 클라이언트와 서버 간의 핸드셰이크(handshake) 과정에서 교환됩니다. 이 과정은 다음과 같이 이루어집니다:
TLS는 데이터가 전송 중에 변경되지 않았음을 보장하기 위해 메시지 인증 코드(MAC)를 사용합니다. 데이터가 도착하면 클라이언트와 서버는 데이터가 변조되지 않았는지 확인합니다.
서버 인증서는 클라이언트가 서버의 신원을 확인할 수 있도록 합니다. 인증서는 신뢰할 수 있는 CA(인증 기관)가 서명한 것입니다. 클라이언트는 이 인증서를 검증하여 중간자 공격(man-in-the-middle attack)을 방지할 수 있습니다.
SSL(Secure Sockets Layer)은 인터넷을 통한 데이터 전송의 보안을 보장하기 위해 사용되는 표준 보안 기술입니다. 현재 SSL의 후속 버전인 TLS(Transport Layer Security)가 주로 사용됩니다.
웹사이트에 HTTPS를 적용하면 사용자와 서버 간의 통신이 안전하게 이루어집니다. HTTPS를 통해 데이터 유출이나 피싱 공격을 방지할 수 있습니다. HTTPS를 적용하기 위해서는 SSL/TLS 인증서가 필요합니다.
SSL 인증서는 무료와 유료로 발급받을 수 있습니다.
Nginx에 SSL 인증서를 설정하여 HTTPS를 적용하는 방법을 설명합니다. 아래 예제에서는 인증서 파일과 키 파일을 설정합니다.
# 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등을 통해 발급받은 인증서를 위 위치로 옮겨야함