HTTPS 란, HTTP 프로토콜에 보안 기능을 추가하여 안전한 데이터 교환을 위해 만들어진 프로토콜입니다. 기존 HTTP 에 SSL/TLS 를 추가적으로 거치도록 하여 보안을 강화하였으며, 이를 통해 데이터가 변조되지 않았음을 보장하고, 암호화된 데이터로 제 3자가 식별할 수 없도록 하며 인증서를 사용한 인증으로 서로의 신원을 확인할 수 있도록 합니다.
암호화 방식
대칭 키 암호화
클라이언트와 서버에서 하나의 Key 를 공유하고, 해당 Key 를 이용하여 암/복호화를 진행하는 방식입니다. 빠른 속도를 지원하며, 길이 제한이 없다는 장점이 있지만 Key 가 양쪽에서 관리되므로 관리에 특히 신경써야 하며, 유출시 암/복호화를 모두 할 수 있어 전체 보안에 문제가 생길 수 있는 문제가 있습니다.
비대칭 키 암호화
공개 Key 와 비공개 Key 를 사용하는 방식으로, 암호화시에는 공개 Key 로 암호화 하고 복호화시에는 비공개 Key 로 복호화를 진행하게 됩니다. 공개 Key 는 유출되어도 암호화밖에 하지 못하기 때문에 비교적 보안에 안전하지만, 느리고 길이 제한이 있다는 단점이 있습니다.
SSL 인증서
인증서 소유자의 정보 + CA 정보 + 공개 Key 를 포함하는 파일로, 인증서를 발급해주는 기관인 CA 로부터 발급받아 사용합니다. 해당 인증서를 통해 방문하고자 하는 사이트가 신뢰할 수 있는 사이트 임을 보증합니다.
동작 과정
TLS 를 기준으로, 비대칭 키 암호화와 대칭 키 암호화를 모두 사용하여 통신합니다. TLS handshake 과정에서는 인증서를 사용한 비대칭 키 암호화를, 실제 통신을 할 때는 세션키를 기반으로 대칭 키 암호화를 사용합니다.
1. 클라이언트가 서버로 요청합니다. 2. 서버는 CA 로부터 발급받은 인증서를 전달합니다. 3. 클라이언트는 전달받은 인증서 서명을 CA의 공개 Key 로 검증합니다. 4. 세션 키를 생성하고, 복호화한 인증서 내부의 해당 서버의 공개 Key 가 존재하여 해당 Key 를 이용하여 암호화하여 서버로 전달한다. 5. 서버는 비밀 Key 로 복호화하여 세션키를 얻는다. 6. 이후에는 세션키를 통해 대칭 키 암호화 방식으로 통신한다.