SSL
원래 웹에서 데이터는 평문 일반 텍스트 형태로 전송되었다. 이는 보안에 취약하다. 정보 보호, 인증, 데이터 무결성 보장을 위해 SSL이 등장했다.
TLS
TSL는 SSL3.0버전에서 이어진 것으로 SSL과 TSL를 혼용해서 부르기도 한다. (TSL라는 이름보다 SSL이라는 이름이 더 많이 사용되고 있다.) 따라서 설명에서는 SSL/TSL 작동을 동일하게 보고 설명하도록 하겠다.
HTTPS 와 SSL
HTTPS는 HTML을 전송하기 위한 통신 규약인 HTTP 프로토콜에서 Secure라는 의미의 S가 추가되었다. HTTP는 암호화 되지 않은 데이터를 전송하기 때문에 보안상 취약하며, 이를 보완하여 등장한 것이 HTTPS이다. HTTPS는 SSL 프로토콜 위에서 동작하는 프로토콜이라고 이해할 수 있다.
비밀키 (대칭키) 암호화 방식
수신측과 송신측이 동일한 key를 사용해서 암호화 및 복호화를 사용한다. 컴퓨터 자원을 적게 사용하지만 동일한 key를 사용하기 때문에 해당 key가 노출되면 보안상 치명적인 문제가 발생하는 단점이 있다.
공개키(비대칭키) 암호화 방식
대칭키 암호화 방식에서의 key 교환 문제 및 보안 취약성을 해결하기 위해 공개키 암호화 방식이 등장했다. 공개키(비대칭키) 암호화 방식은 말그대로 암호화를 할 때의 key와 복호화를 할 때의 key가 서로 다르다. 공개키 방식에서는 송수신자가 모두 한쌍의 키 (개인키 & 공개키)를 갖게 된다. 그리고 공개키는 모든 사람이 접근 가능한 키여서 키를 교환할 필요가 없ㄷ. 개인키는 각 사용자들만이 가지고 있는 키이다. 메세지를 전송하는 쪽에서 공개키로 데이터를 암호화하면, 수신하는 쪽에서는 반드시 비공개키(= 개인키, 비밀키라고도 함)로 데이터를 복호화 한다.
예를 들어, A 가 B에게 데이터를 보낼 때 A는 데이터를 'B의 공개키'로 암호화 한다. B는 전달받은 암호화된 데이터를 'B 자신의 개인키' 로 복호화한다. B의 개인키는 B가 가진 공개키에 대응될 것이므로 다시 말해서 A가 보낸 데이터는 B만이 볼 수 있게 된다.
SSL은 공개키와 대칭키의 장점을 혼합한 방법을 사용한다.
- 실제 데이터 : 대칭키 (비밀 키) 암호화 방식
- 대칭키의 키 : 공개키 (비대칭키) 암호화 방식
SSL/TLS Handshake
Handshake 란 클라이언트와 서버 간 세션 계층에서 연결을 하기 위한 과정이다. Handshake 단계는 클라이언트와 서버가 사용하는 암호화 알고리즘 및 key 교환 알고리즘에 따라 달라질 수 있으나, 일반적으로 RSA key 교환 알고리즘이 사용된다고 한다.
파란색 칸에 해당하는 SYN, SYN ACK, ACK은 TCP 프로토콜에서 등장하는 3-way handshake 이다. SSL Handshake에 앞서서 연결에 필요한 과정이다.
ClientHello
클라이언트가 서버에 연결을 시도하면서 전송하는 패킷이다. 패킷에 담아 전송하는 내용으로는 SSL/TSL 버전, Client에서 지원하는 암호화 알고리즘, 무작위 바이트 문자열이 포함된다. Client와 Server가 지원하는 암호화 알고리즘이 다를 수 있어서 어떤 암호화 알고리즘을 사용할 것인지 협상이 필요하므로 Client에서는 자신이 지원할 수 있는 암호화 알고리즘 방식을 전송하는 것이다.
ServerHello
서버가 Client Hello 에 대한 응답으로 Server Hello를 한다. 이 과정에서 Certificate(인증서), 서버측에서 생성한 무작위 바이트 문자열, 서버가 선택한 클라이언트 암호화 방식 정보를 보낸다.
Certificate
Server 자신의 SSL 인증서를 Client에게 전달한다 . SSL인증서에는 서비스 정보, 서버측 공개키 내용이 담긴다. 서버의 개인키는 서버가 따로 가지고 있는다. 클라이언트는 서버가 보낸 인증서가 CA에 의해서 발급된 것인지 확인해야 한다. 따라서 클라이언트에 내장된 CA리스트를 확인한다. 클라이언트에 내장된 CA의 공개키를 사용하여 서버가 보낸 인증서(SSL인증서) 복호화 한다. 복호화에 성공하면 이 SSL인증서가 CA에서 서명한 것이 맞다는 것이므로 신뢰할 수 있다.
- CA (Certificate authority) : 인증서를 발급하는 기관이다. 공인된 기업들만이 CA로 참여할 수 있다.
ServerHello Done
서버의 공개키가 SSL인증서에 없으면 서버가 직접 공개키를 전달하는 과정이 Server Key Exchange이다. 만약 SSL인증서에 서버의 공개키가 포함되어 있다면 Server Key Exchange 과정은 일어나지 않는다. 클라이언트가 서버의 공개키를 확보하면, ServerHelloDone 을 전달한다.
ClientKeyExchange
클라이언트는 대칭키를 생성한다. 이 대칭키는 SSL Handshake에서 가장 중요한 목적인 데이터를 암호화 하기 위한 대칭키이다. SSL 인증서에서 추출한 서버의 공개키로 대칭키를 암호화 한다.
ChangeCipherSpec
클라이언트가 ClientKeyExchange과정에서 암호화된 대칭키를 서버에게 전달한다. 서버는 자신이 따로 저장해둔 개인키를 이용하여 사용자 대칭키를 복호화하고 Client의 대칭키를 얻는다. (이 대칭키로 이후에 데이터를 복호화 할 것이다)
Finished
마지막으로 Finished 패킷을 보내면 SSL Handshake 과정은 종료되며 통신을 진행한다.
참고 사이트
https://steady-coding.tistory.com/512
https://opentutorials.org/course/228/4894
'Computer Science > 네트워크' 카테고리의 다른 글
[Network] 서브넷팅 (Subnetting), 서브넷마스크(SubnetMask) 슈퍼넷팅 (Supernetting) (0) | 2023.03.05 |
---|---|
[Network] IP 클래스와 IPv4, IPv6 주소체계 (2) | 2023.03.05 |
[Network] Link Layer(2) - 이더넷(Ethernet)과 ARP 테이블, 프레임 구조 (0) | 2022.12.31 |
[네트워크] Link Layer 역할과 MAC protocol 의 종류 (0) | 2022.12.28 |
[네트워크] IP주소 체계 (0) | 2022.12.26 |