아익... 이모티콘 못생겼다....
HTTPS 의 통신 과정
대칭키 )
- 하나의 키로 데이터를 암복호화 함
- 해당 키 노출시 치명적인 문제 발생
비대칭 키 )
- 공개키와 개인키로 암복호화 수행
- 공개키로 데이터 암호화 하면, 반드시 개인키로만 복호화 가능하고, 개인키로 데이터를 암호화 하면 공개키로만 복호화 가능함. 개인키는 비밀키 또는 비공개 키라고도 불린다. 비대칭키는 보안성이좋지만, 구현어렵고 암복호화 속도 느리다.
암호화 - 개인 키, 복호화 - 공개 키
인증을 위한 목적이다. 즉, 서버에서 개인 키로 데이터를 암호화해서 보냈고 클라이언트에서 공개 키로 복호화가 된다면 해당 서버는 클라이언트 입장에서 신뢰할 수 있다고 판단할 수 있다.
HTTPS 는 응용 계층 프로토콜인 HTTP 와 전송 계층 프로토콜인 TCP 사이에 SSL / TLS 프로토콜을 거치도록 설계됨
HTTPS 는 대칭키 방식과 공개키 방식을 함께 사용하고 있음
데이터를 암호화 할 대칭키(비밀키)를 타인에게 노출시키지 않고,
Client 가 Server 에게 전송하기 위해 협상을 벌이는 것이다.
협상 과정에는 SSL 인증서 전달, 대칭키 전달, 암호화 알고리즘 결정, SSL/TLS 프로토콜 결정 등이 포함된다.
SSL HandShake
인증 : 서버가 내가 요청한 서버가 맞는지 확인
협상 : 브라우저와 서버가 어떤 암호화 방식을 사용할 것인지 협의
파란색 칸 : 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 의 알고리즘에 따라 데이터를 암호화 하게 됨
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
https://aws-hyoh.tistory.com/39
https://nuritech.tistory.com/25
https://steady-coding.tistory.com/512
'☁️2024 > Computer Science' 카테고리의 다른 글
[ Server & OS ] Window 기본 명령어 (0) | 2024.11.28 |
---|---|
[ Server & OS ] 가상화, 가상화 소프트웨어 (0) | 2024.11.27 |
[ Network ] 이중화 ,고가용성, 로드밸런싱 (0) | 2024.11.27 |
[ Server & OS ] Window AD ( Active Directory ) ? (1) | 2024.11.26 |
[ Server & OS ] SNMP 란? - 모니터링 소프트웨어 (1) | 2024.11.25 |