앞선 포스팅에서 키 교환 프로토콜에 대해 간단히 설명했는데,
이를 기반으로 SSL/TLS handshake 과정을 자세히 살펴보자.
여기서 설명하는 SSL/TLS handshake 과정은 TLS 1.2 이하에 해당하는 과정이다.
위에 와이어샤크로 직접 캡쳐한 TLS 1.2 Handshake 트래픽을 참고하며 아래 설명을 해보자면,
client--------------------------------------------------------------------------------------------server
1) client hello ->
<- 2) server hello (+ server certificate, server key exchange*)
3) verify server certificate
4) client key exchange ->
5) finished (+ change cipher spec) ->
<- 6) finished (+ change cipher spec)
<- 7) exchange messages ->
이렇게 간단히 표현할 수 있다.
c 1) TLS 버전, 암호 알고리즘 목록 (cipher suites), client random 전송
s 2) cipher suites 에서 선택한 암호 알고리즘, server random, session ID, CA가 서명한 server 인증서 전송
* server 인증서에 server 공개키 포함
c 3, 4)
□ RSA : CA 통해 server 에 대한 신뢰성 확보 후, premaster secret 생성 후 server 공개 키로 암호화하여 전송,
server 는 자신의 개인 키로 premaster secret 복호화
□ Diffie-Hellman : client 가 D-H 공개키 생성 후 (Diffie-Hellman client params) server 에 전송하고,
client 와 server 는 각각 premaster secret 생성
premaster secret과 client/server random 으로 master secret 생성 및 세션키 생성
c 5) client 는 지금까지의 교환 내용을 적용하고, 이를 해시한 값을 대칭 키로 암호화, 전송 및 종료
s 6) server 역시 교환 내용 적용 후, 해시를 생성하여 client 로부터 받은 값과 비교, 일치하면 대칭 키로 암호화한 종료 메시지 전송
c <-> s 7) SSL/TLS 세션 동안 대칭 키로 암호화된 애플리케이션 (HTTP) 데이터 통신
* 2, 3, 4) 에서,
RSA 가 아닌 D-H (fixed, ephemeral) 방식을 사용하여 암호화 한다면,
D-H 매개변수에 거명해 인증하는 server key exchange 과정 (Diffie-Hellman server params)이 추가된다.
(anonymous D-H 에서는 서명 생략)
D-H 매개변수를 전달 받아야 client 가 D-H 공개키를 생성할 수 있기 때문
Ephemeral Diffie-Hellman
매 협상 시 마다 새로운 D-H 개인키 생성
* 2) 에서,
server 인증서의 기능은 2가지이다.
- client 가 접속한 server 가 신뢰할 수 있음을 보증
- TLS 연결 위한 server 공개 키 제공
비대칭 암호화가 오버헤드가 높기 때문에 모든 통신 과정 내내 비대칭 암호화를 사용할 수 없어,
1,2,3,4,5,6 까지는 비대칭 키 방식을 이용하여 트래픽을 주고 받으며,
7 이후부터 대칭키( TLS 공유 비밀 키) 방식을 이용하여 암호화 통신을 시작한다.
즉,
인증서에 들어있는 server의 공개 키는 비대칭 암호화를 사용하는 것을 보여주며,
server/client 모두 premaster secret 을 가지고 이 값을 master secret 으로 변환하여 최종적으로 session key 를 생성하면
server 와 client 는 실제 데이터 전송 시, 이 session key 를 사용하여 암/복호화를 수행하는 대칭 암호화를 사용한다.
다음 포스팅에서 TLS 1.3 에 대해 살펴보자.
'NETWORK Security > 보안 프로토콜' 카테고리의 다른 글
TLS1.3 (6) - 환경 구축 (Nginx-2) (0) | 2020.12.29 |
---|---|
TLS1.3 (5) - 환경 구축 (Nginx-1) / nginx, openssl RPM update (0) | 2020.12.29 |
TLS1.3 (4) - 환경 구축 (Apache) (0) | 2020.12.29 |
TLS1.3 (3) - TLS1.3 과 기존 TLS 차이점 (0) | 2020.12.29 |
TLS1.3 (1) - cipher suite, 키 합의 프로토콜, 완전 순방향 비밀성(PFS) (0) | 2020.12.22 |