사실 HTTPS는 HTTP에서 보안 기능만 추가된 것입니다.
보안이 필요한 이유, TLS/SSL의 동작방식, 제3자인증이 무엇인지 정도를 안다면 HTTPS의 동작 원리에 대해서 알게되지 않을까 싶습니다.
- 개인 정보 보호를 위해서
- 데이터의 무결성을 보장하기 위해서
- 식별하기 위해서
만약, HTTP 통신을 하면 이 패킷은 암호화 되어있지 않아 그 내용을 손쉽게 볼 수 있습니다.
개인 정보 보호는 이러한 내용을 원하는 대상 외에는 확인할 수 없도록 하는 것입니다.
우리의 내용을 손쉽게 볼 수 있다는 것은, 그 내용을 수정해서 바꿔도 모른다는 의미입니다.
이렇게 수정해서 바꾸는 것을 중간자 공격이라고 합니다.
무결성은 이 메시지가 전송되는 도중에 변경되거나 조작되지 않고 원래 상태로 전달되었음을 보장합니다.
HTTPS는 디지털 인증서를 활용합니다. 그로 인해 클라이언트는 서버를 신뢰하고 민감한 정보를 보낼 수 있습니다.
HTTPS는 두 종류의 암호화를 사용합니다.
- 대칭키 알고리즘
- 비대칭키 알고리즘(공개키 암호화)
대칭키 알고리즘은 같은 키를 가지고 서로 그 키로 암호화하고, 복호화합니다. 비교적 빠른 속도를 가지며, 키를 공유하는 것에 많은 신경을 써야합니다.
비대칭키 알고리즘은 하나의 공개키를 오픈해두고, 비밀키를 가지고 있는것을 의미합니다. 이 방법은 상대적으로 속도가 느리며, 대신 비밀키만 잘 가지고 있으면 됩니다.
공개키 암호화는 공개된 키로 정보를 암호화해서 비공개 키로 복호화 하는 방법을 사용합니다.
HTTPS에서 사용하는 비대칭키 알고리즘의 안정성을 위해서 제3자 인증을 합니다. 그 중 주요한 키워드는 CA(인증 기관)입니다.
인증 기관은 3가지 목적을 가진 조직입니다.
- 인증서 발급
- 인증서 소유자의 신원 확인
- 인증서의 유효성을 증명
CA는 보안 요구사항과 감사를 거친 신뢰할 수 있는 곳만 지정됩니다.
인증서의 검증은 신뢰 체인을 기반으로 합니다. 인증서가 인증된 기관을 따라가다 보면 루트 인증서가 나오는데, 여기까지 인증과정에 문제가 없다면 전체 인증서가 문제가 없다는 것을 기반으로 합니다.
서버는 이 인증서에 공개키를 담아서 인증 기관에 전달하고, 인증 기관은 서버를 검증한 후 인증서에 공개키를 담아 인증서를 발급해줍니다.
따라서 인증서에는 공개키가 담겨있게 됩니다.
TLS 핸드 셰이크는 TCP three-way hand shake 이후 실행됩니다.
- 클라이언트에서 SSL/TLS 버전 및 암호화 알고리즘 목록을 서버로 보냅니다.
- 클라이언트에서 보낸 정보를 바탕으로 가장 선호하는 알고리즘을 선택해 클라이언트로 보냅니다. 이 때 공개키가 담긴 인증서를 보내줍니다.
- 클라이언트는 서버의 인증서를 CA를 거쳐서 검증하고, pre-master key를 생성합니다. 그리고 이를 서버의 공개키로 암호화해서 보냅니다.
- 서버는 받은 키를 가지고 pre-master key를 획득합니다.
- 이제 연결이 확립되고 서로의 통신은 대칭키 알고리즘으로 통신합니다.