HTTP Secure(HTTPS)는 인터넷 상에서 정보를 암호화하는 SSL(Secure Sockets Layer) 프로토콜을 사용하여 클라이언트와 서버 간 통신을 보호하는 프로토콜이다. HTTPS는 HTTP와 마찬가지로 인터넷 상에서 데이터를 주고받는 통신 규약이지만, 보안성을 강화하기 위해 데이터 암호화 및 서버 인증 기능을 추가한 것이다.
HTTPS는 공개키 암호화 방식과 대칭키 암호화 방식을 모두 사용한다.
HTTPS를 간단하게 설명하면 클라이언트와 서버 간 데이터 전송 시, 대칭키 방식으로 데이터를 암호화하고, 해당 대칭키를 전송하기 위해 공개키 방식으로 대칭키를 암호화한다.
즉, 데이터는 대칭키로 암호화, 데이터를 암호화하기 위한 대칭키는 공개키로 암호화! (암호 만드는 도구를 또 암호화..)
HTTPS에서 클라이언트와 서버 간 통신은 다음과 같은 과정을 거친다.
대칭키 암호화 방식으로 데이터를 암호화해서 누가 패킷을 몰래 중간에 뜯어보더라도 데이터의 내용을 알 수 없게 하고 클라이언트와 서버만 알콩달콩 데이터를 서로 확인하는게 목표이다.
대칭키 암호화 방식을 시작할 때는, 클라이언트가 서버에게 서버가 복호화를 할 수 있도록 클라이언트가 가진 똑같은 대칭키를 전송하는데, 만약 그냥 대칭키를 툭 보내고 누가 이 대칭키가 전송되는 순간을 뜯어보게 되면 그 사람이 대칭키로 내용을 복호화해서 몰래 확인 할 수 있게된다.
이를 방지하기 위해서 서버는 이 대칭키를 전송하는 순간 만큼은 공개키와 개인키 방식을 이용하는 것이다. 서버가 보내주는 공개키로 대칭키를 암호화하고, 서버는 갖고있는 개인키로 암호화된 대칭키를 다시 복호화 해서 사용한다. 그리고 얻은 대칭키로 다시 데이터를 복호화 해서 사용하는 것이다.
그리고 이후에는 서로 대칭키를 안전하게 들고 있으므로, 이 대칭키를 사용해서 암호화된 통신을 진행하는 것이다.
HTTPS를 사용하면 데이터의 기밀성, 무결성, 인증성을 보장할 수 있다. 기밀성은 데이터가 암호화되어 전송되므로 해커 등의 제3자가 데이터를 엿볼 수 없다. 무결성은 데이터가 암호화되어 전송되므로 중간에 데이터가 변경되거나 위조될 수 없다. 인증성은 서버에서 전송한 인증서를 검증하여 서버의 신원을 확인할 수 있다.