티스토리 뷰

환경

SSL/TLS handshake

gajy 2022. 8. 24. 19:27
728x90

1. (client -> server) client hello

client random와 클라이언트가 지원하는 protocol version, client cipher suite 리스트, SNI extension(옵션), curve 리스트(ECDHE의 경우) 전송

2. (server -> client) server

서버는 client hello를 받고 protocol version, cipher suite, curve를 결정합니다. 그리고 클라이언트에게 server random, cipher suite, server의 certificate를 전송합니다.

 

3. (client -> server) 인증서확인, pre-master-secret(대칭키) 생성

Client는 certificate을 검증(전자서명 활용)한 후에, pre-master secret을 만들고(client random, server random 조합) certificate에 포함된 public key로 암호화하여 서버에서 전송합니다.

 

4. client, server

서버는 암호화된 pre-master secret을 자신의 private key로 복호화함으로써 client와 server는 pre-master secret을 공유했습니다.

이후에는 pre-master secret과 client random, server random을 이용해 session key를 유도한 뒤, session key를 이용해 암호화된 데이터 통신을 합니다.


 

** Client는 certificate을 검증(전자서명 활용)

1. 공개키에 대해서 (해쉬 한 후) 인증기관의 비밀키로 암호화 함

--> 인증서의 주요정보를 모아 SHA256등의 해쉬 알고리즘을 이용하여 해쉬 합니다. 이렇게 해서 나온 해쉬값을 인증서의 Finger Print (지문) 이라고 합니다. Finger Print (지문) 을 발급자 (issuer) 인 인증기관 (CA)은 인증기관이 소유하고 있는 비밀키로 암호화 한 후, 그 결과값을 발급자 서명 (Digital Signing) 으로 등록합니다.

2. 역으로 인증기관 (CA) 에서 발행한 공개키로 이 디지털 서명값을 복호화 하면 인증서에 대한 해쉬값을 얻을 수 있음

3. 인증서 에 등록되어 있는 해쉬값과 인증기관에서 발행한 공개키로 서명값을 복호화 해서 나온 해쉬값이 서로 동일하면 인증서의 내용과 공개키가 위변조 되지 않았음을 보증 할 수 있음


참고 자료

 

 

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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