HTTP와 HTTPS 모두 인터넷의 웹 서버와 클라이언트의 인터넷 브라우저 사이에 문자를 전송하기 위한 통신규약으로 웹서버와 브라우저간 암호화된 연결을 설정하는 표준 보안 기술입니다.
다만 HTTP같은 경우는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로챌 수 있고 수정할 수도 있습니다. 이처럼 보안이 취약해질 우려가 있기 때문에 나온 것이 바로 HTTPS입니다. 중간에 보안 계층(응용계층과 전송계층 사이에서 동작하는 독립적인 SSL 프로토콜)을 거쳐서 패킷을 암호화하는 특징이 있습니다.
여기서 SSL이란 클라이언트와 서버 간의 통신을 제삼자가 보증해주는 문서로 클라이언트가 서버에 접속한 직후 서버는 클라이언트에게 이 인증서를 전달합니다. 그러면 클라이언트는 이 인증서를 보고 신뢰할 수 있는 사람인지 확인을 한 다음에 데이터를 보내게 됩니다.
(SSL은 통신에 사용될 공개키를 클라이언트에게 전달해주는 역할을 하며, 두 가지 내용이 들어가게 되는데
첫 번째는 서비스의 정보(CA, 도메인) 두 번째는 서버 측 공개키입니다.)
이러한 SSL을 사용하는 이유는 세가지가 있습니다.
1) 전달되는 내용이 다른 사람에게 노출되는 것을 막을 수 있습니다.
2) 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지 알 수 있습니다.
3) 전달되는 내용이 악의적으로 변경되는 것을 막을 수 있습니다.
이 SSL에서 사용하는 암호화의 종류는 다시 두 가지로 나뉘게 되는데요.
첫 번째는 대칭키, 그리고 두 번째는 공개키입니다.
대칭키
암호를 만드는 행위인 암호화를 할 때 사용하는 비밀번호를 키라고 합니다. 이 키에 따라서 암호화된 결과가 달라지기 때문에 키를 모르면 복호화도 할 수 없습니다. 이중 대칭키 방식은 동일한 키로 암호화 혹은 복호화를 할 수 있는 기법입니다. 그러나 이 방식의 단점은 같은 키로 암호화하기 때문에, 관련이 없는 악의적인 사용자가 암호의 내용을 복호화하여 무슨 데이터를 전달하려고 했는지 알 수 있기 때문에 보안성이 떨어집니다.
이러한 단점을 보완하여 나온 것이 바로 공개키 방식입니다.
공개키
공개키 방식은 두개의 키를 가지고 시작합니다. 두 개의 키 중 하나를 비공개 키라고 부르고, 나머지 하나의 키를 공개키라고 부르는데요. 비 공개키는 자신만이 가지고 있고, 공개키는 타인에게 제공하게 됩니다.
그럼 발행한 공개키를 받은 타인은 공개키를 이용하여 정보를 암호화하고 암호화된 정보를 나에게 전달하게 되면 나는 그 정보를 비공개키로 복호화하여 확인할 수 있게 됩니다.
이렇게 상대방의 공개키를 획득하여 상대방에게 암호화된 정보를 제공하고 신원을 확인하는 것이 중요한데요, 이를 SSL HandShake라고 합니다. SSL HandShake의 흐름은 다음과 같습니다.
1 TCP 3 WAY HANDSHAKE가 먼저 수행됩니다.
2. CLIENT HELLO: 클라이언트는 랜덤한 데이터를 생성하여 서버에게 전송합니다. 클라이언트가 SSL 통신을 하기 위해 지원 가능한 암호화 방식을 서버에게 전달합니다.
3. SERVER HELLO : CLIENT HELLO에 대한 응답으로 서버가 SERVER HELLO를 합니다. 서버에서 생성한 랜덤한 데이터와 클라이언트가 지원 가능한 암호화 방식에 맞춰 서버에서 제공할 수 있는 가장 안전한 암호화 수단 방식을 클라이언트 쪽으로 전달합니다. 서버가 클라이언트에게 인증서를 전달합니다.
4. 클라이언트는 서버가 보내준 인증서가 어떤 CA에 의해서 발급된 것인지 확인하기 위해 클라이언트에 있는 CA리스트를 확인합니다. 인증서가 어떤 CA에 의해 발급된 것인지 확인하기 위해서 클라이언트에게 내장된 CA의 공개키를 이용해서 복호화합니다. 복호화가 성공했다면 해당 인증서는 CA의 개인키로 암호화된 문서임이 보증된 것이므로 인증서를 통해서 서버가 신뢰할 수 있는 서버인지 인증이 된 것이죠.
클라이언트는 2단계에서 받은 서버의 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합하여 pre master secret키(제 3자에게 노출되면 절대 x)를 생성합니다. 이 pre master secret키를 다시 서버로 전송하는데 공개키 방식을 이용해서 전송하게 됩니다.
CA란?
Certificate Authority의 약자로 클라이언트가 접속한 서버가 클라이언트가 의도한 서버거 맞는지를 확인하게 되는데요. 이러한 일을 해주는 회사들을 CA라고 합니다. 이 CA는 브라우저가 리스트를 가지고 있고 이 CA들의 공개키를 가지고 있습니다.
5. 서버는 클라이언트가 전송한 pre master secret값을 자신의 비공개키로 복호화합니다. 이렇게 서버와 클라이언트 모두 pre master secret값을 얻게 되었고 서버와 클라이언트는 이를 master key로 완성하게 됩니다. 이 master key를 이용해서 session key를 만들게 되고 이후 데이터를 주고받을 때 session key를 대칭키 방식으로 이용해서 통신하게 됩니다.
통신이 끝나면 세션키를 폐기하게 됩니다.
참고하면 좋은 글)
[이해하기] HTTP vs HTTPS, 그리고 SSL (Secure Socket Layer) | STEVEN J. LEE
HTTPS 는 일반적인 평문이 들어 있는 HTTP 의 페이지를 SSL (Secure Socket Layer) 이라는 기술을 통해 암호화 하여 서로 주고받게 하는 기술이라고 할 수 있습니다. (본 블로그 페이지도 이와 같이 https://ww
www.stevenjlee.net
https://hanjungv.github.io/2017-11-07-1_CS_SSL/
(CS) TLS/SSL Handshake란
보통 인하대를 나오고 권장우 교수님의 네트워크 과목을 들었다면 TCP의 3-way handshake, 4-way handshake에 대해 많이 들었을 것이다. 하지만 SSL Handshake에 대해 들어본 적은 없을 것이다.(보안쪽에서 나
hanjungv.github.io
'CS > Computer Network' 카테고리의 다른 글
쿠키와 세션의 차이 (0) | 2021.07.11 |
---|---|
HTTP 메서드와 그 역할 (2) | 2021.07.04 |
TCP 3 WAY, 4WAY HANDSHAKE (0) | 2021.06.27 |
OSI 7계층과 TCP/IP 4계층 (0) | 2021.06.22 |
브라우저에 www.naver.com을 입력하면 일어나는 일 - 2 (0) | 2021.05.01 |