HTTP와 HTTPS의 차이점은 무엇인지 확인해보고자 한다.

HTTP

HTTP는 HyperText Transfer Protocol의 약자다. 해석하자면 HyperText를 전송하는 규약을 뜻한다. 즉, 서로 다른 시스템 간에 데이터를 주고받게 해주는 프로토콜이다. 하지만 HTTP는 데이터를 있는 그대로 전송한다. 그래서 중간에 다른 누군가 데이터를 직접 확인하고 위조, 변조를 할 수 있게 된다. 이러한 문제를 해결하기 위해 사용하는 것이 HTTPS다.

HTTPS

HTTPS는 HyperText Transfer Protocol Secure의 약자로 HTTP에 데이터의 보안과 인증 무결성을 더한 프로토콜이라고 생각하면 된다. HTTPS는 중간에 데이터를 가로채어 보더라도 암호화되어 있기 때문에 데이터 식별이 불가능하게 된다. 또한, 데이터가 위조, 변조 되었는지 확인하는 것도 가능하다. 이러한 기능이 가능한 것은 SSL/TLS 덕분이다.

SSL/TLS

SSL

SSL은 Secure Socket Layer의 약자로 TLS의 전신이 된 방식입니다. Netscape가 SSL의 개발을 진행하다가 더 이상 참여하지 않게 되고, IETF가 개발을 주도하면서 TLS로 변경되었다.

TLS

TLS는 Transport Layer Security의 약자로 SSL을 이어 HTTPS에 이용되고 있는 프로토콜입니다. SSL과 TLS 용어가 혼용되어 사용되는 경우가 많아서, SSL/TLS 암호화라고도 부릅니다. 이메일이나 메세지 VoIP와 같은 커뮤니케이션 통신을 암호화하는데 사용된다.

TLS 동작

우선 통신의 두 당사자가 신뢰할 수 있는 사람임을 체크하기 위해 handshake를 진행한다. 이 과정에서 사용하는 방식은 비대칭키 암호화 방식이다.

https://cf-assets.www.cloudflare.com/slt3lc6tev37/3wZIhjRIjfVSmCbVqkBKzb/4a7aa34324108c725dc25fc9e7c4ea4a/tls-ssl-handshake.png

https://www.cloudflare.com/ko-kr/learning/ssl/transport-layer-security-tls/

  1. 클라이언트가 서버에게 ClientHello메세지를 통해 TLS버전, 서버 도메인, 세션 식별자, 암호 설정과 같은 정보가 포함된 메세지를 보낸다.
  2. 서버는 ServerHello메세지와 함께 TLS버전, 서버 도메인, 세션 식별자, 암호 설정과 같은 정보가 포함된 메세지를 보낸다.
  3. 서버는 클라이언트에게 Certificate 메세지를 통해 서버의 인증서를 전달한다.
  4. 클라이언트는 전달 받은 인증서를 검증하여 신뢰할 수 있는지를 판단한 후, 넘어간다.
  5. 신뢰할 수 있다면, 해당 임의의 pre-master secret을 생성하여 서버가 보낸 인증서에 포함된 공개키를 사용해 암호화한다. 암호환 키를 ClientKeyExchange 메세지에 포함시켜 전송한다.
  6. 서버는 이를 개인키로 복호화하여 master secret을 만들어 세션 키를 생성하고, 이를 통해 암호화하여 통신을 하게 된다. 클라이언트는 스스로 pre-master secret을 통해 세션 키를 만들어 암호화 통신을 하게 된다.