-
HTTP vs HTTPS 쉽게 이해하기CS/Network 2023. 3. 1. 21:21
평소에 내가 알고있던 지식은 고작
- HTTPS는 HTTP 프로토콜에 SSL 프로토콜이 더해져서 보다 더 안전하다.
- HTTP는 패킷을 가로채면 수정할 수 있는 위험성이 있지만 HTTPS는 패킷이 암호화되어 패킷을 가로채더라도 암호화 되어있기 때문에 보다 더 안전하다.
이정도로만 알고있었다.
하지만, 어떤 방식으로 암호화가 되는지 깊이있게 공부하지 않았고, 이는 곧 면접에서 대답을 잘 못했었다.
이번 기회에 제대로 알아보고자 정리해보고자 한다.
HTTPS
HTTPS에서 통신 프로토콜은 TLS(Transport Layer Security) 또는 이전에는 SSL(Secure Sockets Layer)을 사용하여 암호화된다. 따라서 "HTTP over TLS" 또는 "HTTP over SSL" 이라고도 불린다.
HTTPS 프로토콜을 사용하기 위해서는 인증기관(CA)으로부터 SSL 인증서를 발급받아야 한다.
SSL 인증서 발급 과정 및 원리
1. (서버) 서버의 공개키와 비밀키를 생성한다.
2. (서버 -> CA) 인증서를 발급받기 위해, 서버는 CA에 아래와 같은 정보를 전달한다.
- 1번에서 생성한 서버의 공개키
- 서버의 각종 메타 정보
3. (CA) 2번에서 서버로부터 받은 정보들을 담아 SSL 인증서를 발급한다.
4. (CA) CA의 공개키와 비밀키를 생성한다. 그리고 CA의 비밀키를 이용해 3번의 SSL 인증서를 암호화한다.
5. (CA -> 서버) 4번에서 암호화한 SSL 인증서를 다시 서버에 전달한다.
이렇게 발급된 SSL 인증서는 모두에게 공개되어있다.
이때, 4번에서 SSL HandShake이 동작하는데,
이는 서버와 클라이언트가 통신을 연결할 때 서로 악수를 통해 신뢰할 수 있는 서버인지 검증하고 정하는 과정이다.
이 때, 서버와 클라이언트가 주고 받을 데이터의 암호화 알고리즘을 결정하고,
서버와 클라이언트가 주고 받을 데이터의 암호화를 위한 동일한 대칭키(데이터를 암호화하는 키)를 얻는다.
4번에서 CA는 비밀키를 이용해 인증서를 암호화했으므로, SSL은 CA의 공개키를 이용해서 복호화할 수 있다.
이를 통해 복호화를 하여 성공했다는 것은 해당 인증서는 CA를 통해 발급된 것이 맞다는 걸 검증할 수 있다.
이를 통해 클라이언트에서 server의 SSL 인증서 검증을 마쳤으면, 어떻게 패킷을 빼어가도 복호화할 수 없는 걸 설명할 수 있을까?
우리는 4번의 handshake 과정에서 클라이언트는 데이터를 암호화하기 위한 대칭키를 생성한다.
이 때 이 대칭키를 우리의 서버만 볼 수 있게 하기위해 서버의 공개키로 암호화를 하여 서버에게 전달한다.
서버의 공개키는 SSL 인증서를 복호화하면 얻을 수 있고, 인증서 내부에 담겨져 있지 않을 경우 3번처럼 직접 서버로부터 전달 받았다.
이제 서버는 클라이언트가 5번에서 전달받은 대칭키를 받았다.
이 키는 서버의 공개키로 암호화되어있으니 서버의 비밀키로 복호화해서 얻을 수 있다.
'CS > Network' 카테고리의 다른 글
대칭키 vs 비대칭키 (0) 2023.03.01