본문 바로가기
IT개념

[IT개념] HTTP와 HTTPS

by JDonly 2024. 8. 14.

개념

  • HTTP (HyperText Transfer Protocol): 웹에서 클라이언트(예: 웹 브라우저)와 서버 간에 데이터를 전송하기 위해 사용되는 프로토콜입니다. 텍스트, 이미지, 비디오 등의 데이터를 주고받는 데 사용됩니다.
  • HTTPS (HyperText Transfer Protocol Secure): HTTP에 보안 계층인 SSL/TLS를 추가한 프로토콜로, 데이터를 암호화하여 전송합니다. 이는 데이터 전송의 기밀성, 무결성, 인증을 보장합니다.

특징

  • HTTP:
    • 데이터 전송이 암호화되지 않음.
    • 빠른 통신 속도.
    • 간단한 구조로 인해 설정이 용이.
  • HTTPS:
    • SSL/TLS를 사용하여 데이터 전송을 암호화.
    • 데이터의 기밀성과 무결성을 보장.
    • 서버의 신원을 인증할 수 있음.
    • 설정과 유지보수가 HTTP보다 복잡하고 비용이 발생할 수 있음(SSL 인증서 필요).

차이점

  • 보안:
    • HTTP는 데이터를 암호화하지 않으므로, 전송 중에 데이터가 도청될 수 있습니다.
    • HTTPS는 데이터를 암호화하여 안전하게 전송하므로, 도청 및 데이터 위변조를 방지합니다.
  • 포트:
    • HTTP는 기본적으로 포트 80을 사용합니다.
    • HTTPS는 기본적으로 포트 443을 사용합니다.
  • URL 표시:
    • HTTP URL은 http://로 시작합니다.
    • HTTPS URL은 https://로 시작합니다.
  • 신뢰성:
    • HTTP는 서버의 신원을 인증하지 않으므로, 중간자 공격(Man-in-the-Middle Attack)에 취약합니다.
    • HTTPS는 SSL/TLS 인증서를 통해 서버의 신원을 인증합니다.

사용 예시

  • HTTP:
    • 간단한 웹 페이지나 테스트 환경에서 사용.
    • 보안이 크게 요구되지 않는 데이터 전송.
  • HTTPS:
    • 온라인 쇼핑몰, 은행, 이메일 서비스 등 보안이 중요한 웹사이트.
    • 로그인 페이지, 결제 페이지와 같이 민감한 정보를 다루는 페이지.
    • 모든 최신 웹사이트는 기본적으로 HTTPS를 사용하여 사용자 신뢰를 확보.

사용 방법

1. HTTP 서버 설정 (예시: Python의 http.server 모듈)

# HTTP 서버 예제
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print(f"Serving HTTP on port {PORT}")
    httpd.serve_forever()

 
2. HTTPS 서버 설정 (예시: Python의 http.server 모듈)
HTTPS 서버를 설정하려면 SSL 인증서가 필요합니다.
아래는 간단한 예제로, 실제 서비스에서는 유효한 인증서를 사용해야 합니다.

# HTTPS 서버 예제
import http.server
import ssl

httpd = http.server.HTTPServer(('localhost', 4443), http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='path/to/cert.pem', keyfile='path/to/key.pem', server_side=True)

print("Serving HTTPS on port 4443")
httpd.serve_forever()

 
3. Apache 웹 서버에서 HTTPS 설정
Apache를 사용하여 HTTPS를 설정하는 기본적인 방법은 다음과 같습니다:
1) SSL 모듈 활성화:

sudo a2enmod ssl

2) 사이트 구성 파일 수정 (/etc/apache2/sites-available/default-ssl.conf):

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        SSLEngine on
        SSLCertificateFile /path/to/cert.pem
        SSLCertificateKeyFile /path/to/privkey.pem

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0

        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    </VirtualHost>
</IfModule>

 
3) 사이트 활성화 및 서버 재시작:

sudo a2ensite default-ssl
sudo systemctl restart apache2

 

결론

HTTP와 HTTPS는 웹 통신의 기본 프로토콜입니다.
HTTP는 단순하고 빠르지만 보안이 취약하고, HTTPS는 데이터 암호화를 통해 보안을 강화합니다.
HTTPS는 특히 민감한 정보를 다루는 웹사이트에서 필수적이며, 점점 더 많은 웹사이트가 HTTPS로 전환하고 있습니다.
설정 과정은 사용하는 서버 소프트웨어와 환경에 따라 다르지만, HTTPS 설정을 통해 사용자 데이터를 보호하고 신뢰를 구축할 수 있습니다.