티스토리 뷰

Study/CS

[네트워크] TLS/SSL handshake

나갱 2022. 7. 3. 04:40

* 이전 포스트에 이어지는 내용입니다 

 

[네트워크] HTTP & HTTPS

개요 HTTP(Hyper Text Transfer Protocol) : -  No Data Encryption Implemented ! - Stateless system - As an "application layer protocol", HTTP remains focused on presenting the information, but cares..

daily-progress.tistory.com

 

 

TLS/SSL Handshake 

통신을 하는 브라우저와 웹 서버가 서로 암호화 통신을 시작할 수 있도록 신분을 확인하고 필요한 정보를 클라이언트와 서버가 주거니 받거니 하는 과정이 악수와 비슷하여 붙여진 이름이다.

 


CA(Certificate Authority)

인증서의 역할은 클라이언트가 접속한 서버가 의도한 서버가 맞는지 보장하는 것이다. 이 역할을 하는 민간 기업들이 있는데 이런 기업들을 CA(Certificate Authority) 또는 Root Certificate라고 부른다. CA는 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있다. 개발자 입장에서 HTTPS를 적용하기 위해서는 신뢰할 수 있는 CA기업의 인증서를 구입해야 한다. 이 인증서를 구입하게 되면 CA기업의 개인 키를 이용하여 암호화한 인증서를 준다. 

 

SSL 인증서

클라이언트와 서버 간의 통신을 제 3자가 보증화 해주는 전자화된 문서이다. 목표는 클라이언트가 접속한 서버가 신뢰할 수 있는 서버인지를 판단하고 SSL 통신에 사용될 공개키를 클라이언트에게 전달하는 것이다. 위에서 언급한대로 SSL 인증서에는 두가지 내용이 들어가는데 첫번째는 서비스의 정보(CA, 도메인) 두번째는 서버측 공개 키이다.

 

 


TLS/SSL의 암호화 방식

공개키 암호화 방식과 대칭 키 암호화 방식을 함께 사용한다. 공개 키 방식으로 대칭 키를 전달하고, 서로 공유된 대칭키를 가지고 통신하게 된다. 

 

 

1. A가 B로 접속 요청을 보낸다.

2. B는 A에게 자신의 공개 키를 전송한다. (B는 미리 공개 키와 개인 키를 만들어 두었다고 가정한다.)

 

3. A는 자신의 대칭 키를 B에서 전달받은 B의 공개 키로 암호화 한다.

4. 이렇게 암호화한 자신의 대칭 키를 B에게 전달한다. 

 

 

 

5. B는 자신의 개인 키로 복호화 하여 A의 대칭 키를 얻어낸다. 

6. 이렇게 얻어낸 대칭 키를 활용하여 A와 B는 안전하게 통신한다. 

 

 

즉, 데이터 암호화와 복호화를 위한 한 쪽의 대칭 키를 다른 쪽의 공개 키로 암호화 하여 전송하면, 반대 편에서 자신의 개인 키로 복호화하여 그 반대편의 대칭 키를 알아내고, 이 대칭 키를 바탕으로 통신하게 된다. 

 

 

* 대칭키와 공개키에 관한 참고 포스트 😊

 

[네트워크] 대칭키 공개키

개요 큰 틀에서의 차이를 보면 대칭 키 암호화 방식은 암 복호화에 사용하는 키가 동일한 암호화 방식을 말한다. 반대로 공개 키 암호화 방식은 암 복호화에 사용하는 키가 서로 다르며 따라서

daily-progress.tistory.com

 


TLS/SSL 의 HandShake 

 

 

 

Handshake 

클라이언트가 서버 접속하여 Handshaking 과정에서 서로 탐색한다.

 

(1) Client Hello

클라이언트가 서버에 연결을 시도하며 전송하는 패킷이다. 자신이 사용 가능한 Cipher Suite 목록, Session Id, SSL 프로토콜 버전, Random Byte 등을 전달한다. 선택된 Cipher Suite의 알고리즘에 따라 데이터를 암호화 하게 된다. 

 

(2) Server Hello 

서버는 클라이언트가 보내온 Client Hello 패킷을 받아 Cipher Suite 중 하나를 선택한 다음 클라이언트에게 이를 알린다. 또한, 자신의 SSL 프로토콜 버전 등도 같이 보낸다. Server가 자신의 SSL 인증서를 클라이언트에게 전달한다. 인증서 내부에는 Server가 발행한 공개 키가 들어있다. 클라이언트는 서버가 보낸 CA의 개인 키로 암호화 된 이 SSL 인증서를 이미 모두에게 공개된 CA의 공개 키를 사용하여 복호화한다. 복호화에 성공하면 이 인증서는 CA가 서명한 것이 맞으니 진짜임을 검증할 수 있다.  

 

(3) Pre master secret(대칭 키) 생성

클라이언트는 데이터 암호화에 사용할 대칭 키를 생성한 후 SSL 인증서 내부에서 추출한 서버의 공개 키를 이용해 암호화한 후 서버에게 전달한다. 여기서 전달된 대칭 키가 SSL Handshake 목적이자 가장 중요한 수단인 데이터를 실제로 암호화할 대칭 키이다.  이제 키를 통해 클라이언트와 서버가 실제로 교환 하고자하는 데이터를 암호화한다. 

 

(4) Server 인증 확인 

서버는 비공개 키로 복호화하여 pre master secret(대칭 키)를 취득한다. 

 

(5) ChangeCipherSpec/Finished

ChangeCipherSpec 패킷은 클라이언트와 서버 모두가 서로에게 보내는 패킷으로, 교환할 정보를 모두 교환한 뒤 통신할 준비가 다 되었음을 알리는 패킷이다. 그리고 Finished 패킷을 보내어 SSL Handshake를 종료하게 된다.

 

 

'Study > CS' 카테고리의 다른 글

[데이터베이스] SQL Injection  (0) 2022.07.09
[컴퓨터구조] ARM 프로세서(ARM Processor)  (0) 2022.07.09
[네트워크] HTTP & HTTPS  (0) 2022.07.02
[네트워크] 대칭키 공개키  (0) 2022.06.26
[네트워크] OSI 7계층  (0) 2022.06.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함