암호화 통신은 SSL, TSL이라는 보안 프로토콜을 통해 브라우저(클라이언트)와 웹서버(서버)의 보안이 향상된 것이다.
보통 https로 시작하는 브라우저는 SSL(Secure Socket Layer) 혹은 TLS(Transport Layer Secuirty)을 이용한 것이다.
SSL과 TLS 둘 다 서버, 애플리케이션, 사용자 및 시스템 간의 데이터를 암호화하는 통신 프로토콜이다.
SSL TSL 핸드셰이크 명시적 연결
단계가 많음암시적 연결
단계가 적음
추가 단계를 제거하고 총 암호 그룹 수를 줄여서
프로세스 속도를 높임.알림 메시지
(오류 경고 전달)알림 메시지 암호화X
두 가지 알림 메시지 (경고/치명적)알림 메시지 암호화O
알림 메시지 더 다양메시지 인증
(무결성 확인을 위한 암호화 기술)메시지 인증 코드(MAC)를 사용 해시 기반 메시지 인증 코드(HMAC)를 사용 암호 그룹
(암호화하기 위한 키를 생성하는 알고리즘 모음)이전 알고리즘 고급 암호화 알고리즘을 사용
SSL은 더 이상 사용되지 않는다.
TLS는 구식 SSL 프로토콜을 대체하며, 현재 모든 사람이 사용하는 암호화 표준이다.
기술적으로는 TLS라는 용어를 쓰는 것이 더 정확하지만 SSL이 널리 사용된다.
SSL은 독립적인 프로토콜 계층 (보안 계층)을 만들어 전송 계층과 운영 계층 사이에 존재한다.
https는 SSL 위에 얹어진 HTTP 프로토콜 계층(운영 계층)이다.
HTTP 뿐만 아니라 FTP, SMTP 프로토콜에 SSL이 적용될 수 있으며, 각각 FTPS SMTPS가 된다.
클라이언트는 랜덤한 데이터와 현재 지원가능한 암호화 방식을 서버에게 전달한다.
서버가 응답하는 과정이다.
응답은 3가지이다.
1. 인증서 with 공개키
2. 서버에서 생성한 랜덤한 데이터
3. 가장 안전한 암호화 수단 방식
암호화 수단 방식은 클라이언트가 지원가능한 암호화 방식 목록 중 선택한다.
클라이언트는 내장되어있는 CA 리스트에서
각 CA의 공개키를 이용하여 서버가 보낸 인증서를 복호화한다.
만약 CA리스트에 없는 인증서라면 사용자에게 경고의 메시지를 띄운다.
만약 복호화를 성공했을 시
해당 인증서는 CA의 개인키로 암호화 한 문서임이 보증되었기 때문에 서버를 신뢰할 수 있게 된다.
( 개인키로 암호화 -> 공개키로 복호화 )
그리고 클라이언트가 전송한 랜덤한 데이터 와
서버가 전송한 랜덤한 데이터 를 조합하여 Pre Master Secret 키를 생성한다.
Step 2에서 받은 공개키를 이용하여
Pre Master Secret 키를 암호화하여 서버로 전송을 한다.
이 때 Pre Master Secret 키는 절대 노출되어선 안된다.
( 공개키는 인증서에 포함되어 있다. )
서버는 Pre Master Secret 값을 자신의 비밀키로 복호화하고
이로써 클라이언트와 서버는 Pre Master Secret 키를 공유하게 된다.
서버와 클라이언트는 일련의 과정을 거쳐
Pre Matser Secret 값을 Master Secret 값으로 만들며,
Master Secret를 이용하여 Session Key를 만든다.
클라이언트와 서버간의 세션을 형성하고
Session Key를 이용하여 암호화하여 데이터를 주고 받는다.
이는 대칭키 방식으로 데이터를 주고 받는 것을 뜻한다.
참고 자료
https://aws.amazon.com/ko/compare/the-difference-between-ssl-and-tls/
https://www.crocus.co.kr/1387