728x90

아익... 이모티콘 못생겼다....


 

HTTPS 의 통신 과정 

 

 

 

대칭키 ) 

- 하나의 키로 데이터를 암복호화 함

- 해당 키 노출시 치명적인 문제 발생

 

비대칭 키 )

- 공개키와 개인키로 암복호화 수행

- 공개키로 데이터 암호화 하면, 반드시 개인키로만 복호화 가능하고, 개인키로 데이터를 암호화 하면 공개키로만 복호화 가능함. 개인키는 비밀키 또는 비공개 키라고도 불린다. 비대칭키는 보안성이좋지만, 구현어렵고 암복호화 속도 느리다. 

 

 

암호화 - 개인 키, 복호화 - 공개 키

인증을 위한 목적이다. 즉, 서버에서 개인 키로 데이터를 암호화해서 보냈고 클라이언트에서 공개 키로 복호화가 된다면 해당 서버는 클라이언트 입장에서 신뢰할 수 있다고 판단할 수 있다.

 

 

HTTPS 는 응용 계층 프로토콜인 HTTP 와 전송 계층 프로토콜인 TCP 사이에 SSL / TLS 프로토콜을 거치도록 설계됨

HTTPS 는 대칭키 방식과 공개키 방식을 함께 사용하고 있음 

데이터를 암호화 할 대칭키(비밀키)를 타인에게 노출시키지 않고,

 

Client 가 Server 에게 전송하기 위해 협상을 벌이는 것이다. 

협상 과정에는 SSL 인증서 전달, 대칭키 전달, 암호화 알고리즘 결정, SSL/TLS 프로토콜 결정 등이 포함된다.

 

SSL HandShake

CloudFlare

인증 : 서버가 내가 요청한 서버가 맞는지 확인

협상 : 브라우저와 서버가 어떤 암호화 방식을 사용할 것인지 협의 

 

 

파란색 칸 : TCP 계층의 3-way-handshake

노란색 칸 : SSL Handshake 

 

 

1. Client Hello

Client가 Server 에 연결을 시도하며 전송하는 패킷.

사용가능한 Cipher suite 목록, Session ID, SSL Protocol Version, Random byte 등을 전달함

Cipher Suite 는 SSL Protocol version, 인증서 검증, 데이터 암호화 프로토콜, 해시 방식 등의 정보를 담고 있는 존재로 선택된 Cipher Suite 의 알고리즘에 따라 데이터를 암호화 하게 됨 
https://aws-hyoh.tistory.com/39

 

2. Server Hello

Client 가 보내온 Client Hello Packet 을 받아서 Ciper Suite 중 하나를 선택한 다음, 

Client 에게 이를 알린다.

또한, 자신의 SSL Protocol Version 도 같이 보낸다.

 

 

 

3. Certificate

Server 가 자신의 SSL 인증서를 Client 에게 전달함.

인증서 내부에는 Server 가 발행한 공개키 ( 개인키는 서버가 소유 ) 가 들어있음.

클라이언트는 서버가 보낸 CA 의 개인키로 암호화된 이 SSL 인증서를 이미 모두에게 공개된 CA 의 공개키를 사용하여 복호화 한다. 복호화에 성공하면, 이 인증서는 CA가 서명한 것이 맞으니 인증서를 검증할 수 있음.

 

 

잠시 인증 과정 ( 인증서 발급 과정 ) 에 대해 짚고 가겠다.

여기서 CA 란 인증 기관을 뜻한다.

 

인증서 발급

1. 서버는 공개키와 개인키 생성하여 자신에 대한 정보와 함께 공개키를 CA 에 전달함

2. CA 는 전달받은 정보를 바탕으로 신뢰할만한 서버인지 확인, 서버의 공개키를 담은 SSL 인증서를 생성함.

3. CA 의 개인키를 이용해서 SSL 인증서를 암호화 함. 즉, 전자 서명을 통해 해당CA 에서 발급한 인증서라는 것을 증명할 수 있게 함

4. 암호화된 SSL 인증서를 서버에 전달하고, 서버는 이를 보관함 

 

인증서 검증 

인증서는 CA 의 공개키로 복호화 할 수 있기 때문에, 브라우저가 CA 로 부터 공개키를 얻어내 인증서의 진위여부 확인 가능함

 

1. 브라우저가 서버와 연결을 요청하면, 서버는 자신의 SSL 인증서를 브라우저에게 전달함

-> SSL 인증서는 SSL HandShake 과정을 통해 브라우저에게 전달됨 

2. 브라우저는 CA 에게 인증서 검증 요청을 함 

3. CA는 자신의 공개키를 브라우저에게 전달함

4. 브라우저는 CA 공개키로 SSL 인증서를 복호화 함, 복호화 하여 서버 공개키 획득

=> 즉 이 과정은 위에 적었던 3번, Certificate 과정을 의미함 

 

4. Server Key Exchange / Server Hello Done

Server 의 공개키가 SSL 인증서 내부에 없는 경우, 서버가 직접 전달함을 의미함 

- 공개키가 있는 경우 생략되는 과정임

- DH 알고리즘이 키 교환알고리즘으로 사용되는 경우 , 공개된 특정 값을 통해 대칭키를 계산하기 때문에, 이 값을 Server Key Exchange 과정에서 전달함

 

 

 

5. Client Key Exchange 

Client 는 Server 와 원하는 데이터를 안전하게 주고받기 위해 전달하는 데이터를 암호화 해야한다. 

대칭키를 Client 가 생성하여 SSL 인증서 내부에서 추출한 Server 의 공개키를 이용해서 암호화 한 후 Server 에 전달함

 

 

6. Change Ciper Spec

클라이언트와 서버가 교환할 정보를 패킷으로 전달함

서버는 클라이언트가 보낸 대칭키를 서버의 개인키로 복호화해 대칭키를 얻음

서버와 클라이언트 모두 동일한 대칭키(비밀키)를 갖고있으니, 통신할 준비 완료! 

 

7. Finished

 

SSL Handshake 종료

 

 

헛갈리면 안되는 것)

서버측에서 ssl 인증서 암호화 할 때에는 CA 의 '개인키' 로 암호화

클라이언트 측에서 ssl 인증서 복호화 할때 CA 의 '공개키'로 복호화

 

반대로,

클라이언트 측에서 데이터를 암호화 할 때에 server 의 '공개키'로 암호화

서버측에서 데이터를 복호화 할 때에 server 의 ' 개인키' 로 복호화

 

--출처--

https://velog.io/@ann0905/HTTPS-2.-HTTPS%EC%99%80-SSL-Handshake

 

[Network] HTTPS와 SSL Handshake

💡 \[HTTPS] 1. 암호화에 대하여(대칭키, 공개키) 에서 이어지는 글입니다.오늘은 암호화 방식에 이어서, HTTPS에 대해 알아보려고 한다.이전 포스팅에서 다룬 대칭키, 공개키 방식을 HTTPS에서 어떻

velog.io

https://aws-hyoh.tistory.com/39

 

HTTPS 통신과정 쉽게 이해하기 #3(SSL Handshake, 협상)

고대 그리스에서는 타인에게 노출되어서는 안 될 중요한 정보를 보낼 때, 전달하는 이(사자)의 머리를 빡빡 깎아서 중요한 정보를 적은 후 머리가 자라서 글이 보이지 않으면 그제야 상대방에게

aws-hyoh.tistory.com

https://nuritech.tistory.com/25

 

HTTPS 통신 원리 쉽게 이해하기 (Feat. SSL Handshake, SSL 인증서)

이 글을 쓰게 된 이유는,, 나의 평소 HTTPS 에 대한 지식은 HTTPS 가 암호화된 네트워크 통신 프로토콜이고 HTTPS 를 사용한 네트워크 통신에서는 주고받는 패킷을 까도 데이터가 암호화되어 있어 안

nuritech.tistory.com

https://steady-coding.tistory.com/512

 

[네트워크] TLS & SSL Handshake

cs-study에서 스터디를 진행하고 있습니다. SSL Handshake란? Handshake는 악수를 의미하는데, 통신을 하는 브라우저와 웹 서버가 서로 암호화 통신을 시작할 수 있도록 신분을 확인하고 필요한 정보를

steady-coding.tistory.com

 

728x90
리촬리