HTTP는 HyperText Transfer Protocol를 의미하며,
말 그대로 클라이언트와 서버가 지정한 모델에 따라
데이터를 주고 받기 위해 사용되는 프로토콜입니다.
HTTP는 OSI 7계층 중
마지막인 어플리케이션 계층에 속하는 프로토콜 중 하나입니다.
HTTP는 인터넷을 통해 HyperText를 주고 받기 위한 통신 규약이며
80번 포트를 사용하고 있습니다.
그러므로 HTTP 서버는 80번 포트에서 데이터 요청을 기다리고 있고,
클라이언트는 원하는 데이터의 요청을 80번 포트로 보내게 됩니다.
HTTP 통신은 클라이언트와 서버간의 통신을 할 때,
별 다른 보안 조치가 존재하지 않기에
제3자가 전송되는 데이터를 모두 조회할 수 있다는 문제점이 존재합니다.
만약 비밀번호나 주민등록번호와 같은 개인 정보를 주고 받는 통신을 한다면
개인정보 유출과 같은 문제가 발생할 가능성이 매우 높습니다.
해당 문제를 해결하기 위해 탄생한 것이 바로 HTTPS입니다.
HTTPS는 HyperText Transfer Protocol Secure를 의미하며,
어플리케이션 계층에 새로 만들어진 프로토콜이 아닌
HTTP에 데이터 암호화(Secure)가 추가된 프로토콜입니다.
HTTPS는 기존 80번 포트를 사용하던 HTTP와 다르게
443번 포트를 사용하여,
제3자가 통신을 통해 주고 받는 데이터를 확인하지 못하도록
암호화하여 데이터를 주고 받습니다.
HTTPS는 두가지 암호화 방식인
대칭키 암호화와 비대칭키 암호화 두가지 방식이 존재합니다.
두 암호화 방식은 서로 대조되는 장단점을 지니고 있습니다.
대칭키 암호화는 클라이언트와 서버가 동일한 키를 활용하여
암호화와 복호화를 진행합니다.
대칭키의 장점은 연산속도가 매우 빠르지만
해당 키가 노출되면 매우 위험하다는 단점이 존재합니다.
비대칭키 암호화는 1개의 쌍으로 구성된 공개키와 개인키를
암호화와 복호화를 하는데 사용합니다.
비대칭키의 장점은 키가 노출되어도 비교적 안전하지만
연산 속도가 느리다는 단점이 존재합니다.
비대칭키 암호화는 공개키와 개인키 암호화 방식을 이용해 데이터를 암호화합니다.
어떤 키로 암호화 또는 복호화를 할지 정함에 따라 서로 다른 효과를 얻을 수 있습니다.
HTTPS의 작동 방식은
대칭키와 비대칭키 방식을 전부 사용하는
하이브리드 방식을 통해
통신이 이뤄지게 됩니다.
데이터 전송을 위해 대칭키 방식을 사용하고
해당 대칭키를 안전하게 전달하기 위해
비대칭키 방식을 활용합니다.
SSL Handshake에 앞서 HTTPS가 TCP 기반의 프로토콜이기 때문에
3-way handshake를 통해 연결 후,
SSL/TLS Handshake를 통해 연결이 진행됩니다.
Client는 Server에 연결을 시도한다 (Client Hello)
자신이 어떤 방식으로 암호화하여 사용할 지 cipher suite에 표시를 합니다.
해당 패킷을 확인해보면 Client Hello라고 출력되는 것을 확인할 수 있다.
Cipher Suite
- 해당 항목에 총 5가지의 알고리즘 채워 넣어 통신을 진행합니다.
- 키 교환 암호 알고리즘 : Server와 Client간 Key를 교환할 방식을 선정
- 인증 알고리즘 : Server와 Client간 교환한 인증서를 확인하는 알고리즘
- 대칭 암호 알고리즘 : 실제 데이터를 암호화하는 알고리즘
- 블록 암호 운용 방식 : 데이터를 암호화할때 한꺼번에 암호화하는 것이 아닌 블록 단위로 암호화하게 되는데, 블록된 암호화 패킷을 조합하여 데이터를 추측하는 것을 방지하기 위한 방식
- 해시 알고리즘 : 서로 상대방이 암호화한 것이 맞는지 확인하기 위한 알고리즘
Server는 Client에 응답을 보낸다 (Server Hello)
Server는 Client에 Certificate, Server Key Exchange, Server Hello Done을 전송한다.
Client에서 Server의 SSL 인증서를 검증합니다.
서버에서 보낸 SSL 인증서에 대한 검증을 하는 단계입니다.
SSL 인증서 검증 원리
- 클라이언트는 인증서를 발급한 인증기관(CA)의 public key를 찾는다.
- 찾은 public key를 이용해 SSL 인증서를 복호화한다.
- 복호화 성공 시, 인증서 검증을 완료한다.
- SSL 인증서를 발급한 CA(인증기관)는 CA의 private key를 통해 인증서를 암호화했다.
- 그러므로 SSL 인증서는 CA의 public key를 이용해서만 복호화할 수 있다.