IT개념
[IT개념] HTTP와 HTTPS
JDonly
2024. 8. 14. 10:00
개념
- 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 설정을 통해 사용자 데이터를 보호하고 신뢰를 구축할 수 있습니다.