보안 우수 사례나, 웹서이스의 보안에 대해서 검색하다보면 안전한 데이터 전송을 위해 HTTPS를 사용권장을 한다.
HTTP와 HTTPS가 무엇이 다르길래 HTTPS로 전송하는게 안전하다고 하는 걸까?
HTTP(Hyper Text Transfer Protocol)란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.
HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 모든 데이터 교환의 기초가 된다고 할 수 있다.
즉, HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.
HTTP는 텍스트 기반 프로토콜로, 데이터를 암호화하지 않고 인터넷을 통해 전송한다.
이는 해커가 네트워크 상에서 데이터를 가로채어 내용을 확인하거나 수정할 수 있다는 위험이 있다. 또한, HTTP는 데이터 전송 과정에서 인증과정이 없기 때문에, 송신자가 진짜인지 아닌지를 확인할 수 없다.
이러한 보안상의 취약점으로 인해, HTTP는 인터넷에서 민감한 정보를 주고받기에는 적합하지 않다고 한다.
HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 등으로 불리는 HTTPS(Hyper Text Transfer Protocol Secure)는 HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.
HTTPS는 어플리케이션 계층과 전송 계층 사이에 신뢰계층인 SSl/TLS 계층을 넣어 신뢰할 수 있는 HTTP 요청을 말한다. 이를 통해서 '통신을 암호화'한다.
도메인 이름 앞에 자물쇠 아이콘이 있으면 해당 사이트는 HTTPS로 인해 안전한 것인지 확인할 수 있다.
반면, HTTPS는 HTTP와 달리 SSL(Secure Sockets Layer)이나 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화하여 전송한다. 이를 통해, 해커가 데이터를 가로채도 암호화된 상태로만 볼 수 있고, 데이터의 무결성을 보장할 수 있다. 또한, HTTP와는 달리 CA에서 발급하는 인증서를 통해 사용자가
따라서 HTTPS는 인터넷에서 민감한 정보를 주고받는 경우에 적합하다고 볼 수 있다.
SSL은 웹에서 안전한 통신을 보장하기 위한 보안 프로토콜 중 하나이며, 데이터 전송 과정에서 인터넷 상에서 데이터를 안전하게 전송하기 위해 사용된다.
인증서가 신뢰할 수 있다는 검증 작업을 거치고 나서 데이터 암호화 작업이 수행된다.
SSL은 공개 키 암호화 기술을 사용하여 통신 채널을 보호한다. 이는 대칭 키 암호화와 비대칭 키 암호화를 결합한 형태로 구현한다.
공개 키 암호화
대칭키 방식
해시 테이블 처럼 키가 있어야 암호화를 할 수 있다
암호화 할때 1234이라는 암호로 키를 사용했다면 1234이 있어야 복호화 할 수 있다
대칭키를 공유할때 위험이 노출되기 때문에 매우 위험하다
비대칭 키 방식
공개키(public key)와 개인키(private key)를 가진다
공개키로 암호화 하는 경우와 개인키로 암호화 하는것으로 구분
암호화할때의 키와 복호화할 때의 키 값이 다르면 비대칭 키라고 한다
TLS
TLS는 SSL의 버전을 업그레이드한 것으로, SSL의 취약점을 보완하고 보다 강력한 보안 기능을 제공한다.
TLS는 SSL과 다르게 RSA를 대체하는 안전한 키 교환 알고리즘인 DH (Diffie-Hellman) 및 ECDH (Elliptic Curve Diffie-Hellman)를 기본으로 사용한다.
SSL은 인증서의 검증 방식에 MD5와 SHA-1과 같은 취약한 해시 알고리즘을 사용하였지만, TLS는 더 강력한 SHA-256과 같은 안전한 해시 알고리즘을 사용한다. TLS는 인증서의 검증 방식에서 OCSP (Online Certificate Status Protocol)와 CRL (Certificate Revocation List)을 사용하여 인증서의 유효성을 검증한다.
HTTPS에서 대칭키 암호화와 공개키(인증서) 암호화를 조합한 하이브리드 암호화 방식으로 암호화를 진행해서 통신을 한다.
보안 기능을 제공하는 HTTPS의 원리는 다음과 같다.
암호화: HTTPS는 대칭키 암호화를 사용하여 클라이언트와 서버 간에 전송되는 데이터를 암호화한다. 이렇게 하면 중간에 제3자가 데이터를 가로채더라도 내용을 알 수 없다.
인증: HTTPS는 공개키 인증서를 사용하여 서버의 신원을 확인한다. 공개키 인증서는 서버가 신뢰할 수 있는지 여부를 확인할 수 있는 인증 기관에서 발행된다. 클라이언트는 서버의 공개키를 사용하여 인증서의 유효성을 확인한 후에만 통신을 시작한다.
무결성 보호: HTTPS는 데이터의 무결성을 보호하기 위해 메시지 다이제스트를 사용한다. 메시지 다이제스트는 데이터의 내용을 요약한 것으로, 데이터가 변경되었는지 여부를 확인할 수 있다.
중간자 공격 방지: HTTPS는 중간자 공격을 방지하기 위해 SSL 인증서를 사용한다. SSL 인증서는 클라이언트와 서버 간에 통신하는 도중에 제3자가 가로채는 공격을 막아준다.
참고자료(출처)
망나니개발자 블로그
HTTPS/SSL