1. HTTPS 란
· HTTP의 암호화되지 않은 평문으로 해킹 또는 변조 등 보안적 단점을 보완하기 위한 프로토콜
· HTTP + SSL 로, HTTPS 새로운 프로토콜이 아니라 HTTP 통신 소켓(socket) 부분을 SSL(Secure Soket Layer) 또는 TLS(Transport Layer Security) 프로토콜로 대체 (SSL 통신)
2. SSL (Secure Socket Layer)
· 넷스케이프(Netscape) 사에 의해 클라이언트(clinet)-서버(server) 보안을 위해 탄생하였으며, 'CA'(Certificate Authority) 서드 파티로부터 클라이언트, 서버 인증에 사용
· SSL은 보안과 성능상의 이유로 '공개키'와 '대칭키' 2가지 암호화 기법을 혼용하며 클라이언트-서버 간 데이터는 대칭키 방식으로 암호화하고 복호화 시에는 (복호화에 사용될) 대칭키를 공개키 방식으로 암호화 하여 클라이언트-서버 간에 주고 받음
1) 대칭키
· 암호화/복호화 시 사용하는 일종의 비밀번호 (키(key))
· 대칭키 값에 따라 암호화/복호화 결과가 달라지기 때문에 주고 받는 쪽(클라이언트, 서버)이 같은 키 값을 갖고 있어야함
※ 대칭키 방식은 대칭키를 전달하는 과정에서 노출 가능성이 있는데, 이것을 공개키로 해결
2) 공개키
· 2개의 키(key)를 사용하며 'A'키로 암호화하고 'B'키로 복호화, 'B'키로 암호화하고 'A'키로 복호화할 수 있는 방식으로 2개의 키는 각각 비공개 키(private key)와 공개 키(public key)로 지정. 공개키만을 클라이언트에 제공하여 클라이언트는 제공받은 공개키를 이용해 암호화하고 서버에 전달하면 서버는 비공개 키를 이용해 복호화함
※ 이 과정에서 공개키가 노출되어 비공개키를 모르면 복호화가 불가능하기 때문에 보안상 안전이 보장
① 전자 서명 (RSA 공개키 방식)
- 서버는 데이터를 비공개키로 암호화하여 공개키와 함께 데이터를 클라이언트에 전송
- 클라이언트는 공개키를 이용해 데이터를 복호화
3) SSL 인증서
· 서버의 신뢰성을 보장하고 SSL 통신에 사용할 공개키를 클라이언트에 제공
· SSL 인증서에는 서비스의 정보(인증서를 발급한 CA, 서비스 도메인 등)와 서버 측 공개키(키, 공개키 암호화 방식)의 정보를 포함함
※ 위 2가지 내용은 CA에 의해 암호화(공개키 방식)되며 비공개 키는 절대 외부로 노출되어선 안됨
※ 브라우저는 내부적으로 CA 리스트를 포함하고 있으며 이는 공인된 CA로 제한 (공개키 포함)
4) SSL 인증서가 서비스를 보증하는 방법
· 클라이언트 → 서버 접속 시 서버는 인증서를 제공
· 클라이언트 브라우저는 해당 인증서를 발급한 CA가 자신의 CA 리스트와 매칭을 확인하고, 매칭이 확인되면 CA 공개키를 이용해 인증서를 복호화
※ CA 공개키를 이용해 복호화가 성공하면 해당 서비스 신뢰성을 인증
5) SSL 동작
· 공개키와 대칭키를 혼용
· 데이터 : 대칭키 방식 암호화 (데이터와 대칭키를 모두 전송)
· 대칭키 : 공개키 방식 암호화
악수(Hand Shake) → 세션(session) → 세션 종료
① 악수 (Hand Shake)
· 실제 데이터 송수신 전 클라이언트-서버의 사전준비(상대방의 존재 유무, 데이터 송수신 방식 확인)
· SSL 통신 방식에서는 이때 SSL 인증서를 주고 받음
· 일반적으로 데이터 공개키 방식으로 암호화/복호화에 사용하지만 컴퓨터 자원 사용량이 많기 때문에 SSL에서는 공개키와 대칭키 방식을 혼용
( ※ 대칭키 방식 : 컴퓨터 자원의 사용량이 적음, 공개키 : 보안 )
a. 클라이언트 → 서버 접속 : Client Hello
- 클라이언트 : 랜덤 데이터, 지원 암호화 방식, 세션 ID(세션의 재사용) 정보를 포함
b. 서버 → 클라이언트 응답 : Server Hello
- 서버 : 랜덤 데이터, 선택한 클라이언트의 암호화 방식, 인증서 정보를 포함
c. 클라이언트 브라우저에서 서버의 인증서 확인 - CA 리스트에서 매칭되지 않은 경우 오류 출력
- 클라이언트는 b단계에서 받은 서버의 랜덤 데이터와 자신이 생성한 랜덤 데이터를 조합하여 pre-master secret 키를 생성
- 클라이언트는 서버의 공개키로 pre-master secret 키 암호화 및 서버로 전송 ( 서버의 공개키는, 인증서 내에 포함 )
d. 서버는 암호화된 pre-master secret 키를 복호화하여 클라이언트와 동일한 키를 공유
- pre-master secret 키를 master scret 키로 변환, master secret 키 값은 세션 키(session key)를 생성
- 해당 세션 키를 이용해 데이터를 대칭키 방식으로 암호화하여 클라이언트-서버 간에 주고 받음
※ 위 과정을 통해 클라이언트-서버는 동일한 세션 키를 공유
e. 클라이언트-서버는 악수 단계 종료를 서로에게 알림
② 세션 (session)
· 실제 클라이언트-서버가 데이터를 송수신하는 단계
※ 세션 키 값을 이용해 데이터를 암호화/복호화 함
③ 세션 종료
· 클라이언트-서버 간 데이터 전송이 끝났음을 알리고 세션 키를 폐기함
'Study' 카테고리의 다른 글
[STUDY] ECMAScript5 / ES5 (2009) (0) | 2022.05.27 |
---|---|
[STUDY] ECMAScript - 연혁(버전) 및 정리 (0) | 2022.05.22 |
[STUDY] HTTP (Hyper Text Transfer Protocol) (0) | 2021.12.10 |
[STUDY] 브라우저 렌더링 (Browser Rendering) (0) | 2021.11.05 |
[STUDY] 메모리 (RAM, Random Access Memory) (0) | 2021.11.03 |
댓글