본문 바로가기

HTTPS, TLS, SSL 인증서, 전자서명, SSL 동작방법, 대칭키, 공개키

by VIPeveloper 2022. 2. 16.
반응형

HTTPS란?

HTTPS는 HTTP에 보안규칙이 적용된 프로토콜이다.

- HTTP의 보안이 강화된 버전입니다.

- 통신의 인증과 암호화를 위해 개발되었습니다.

- 일반 텍스트를 이용하는 대신 SSL이나 TLS 프로토콜을 이용해 세션 데이터를 암호화합니다.

- 기본 포트는 443입니다.

- HTTP 하부에 SSL과 같은 보안 계층을 제공함으로서 동작합니다.

 

TLS란?

- Transport Layer Security

- SSL의 진화버전 => SSL3.0이 TLS1.0의 기반이 되었다고 합니다.

 

HTTP란?

- Hyper-Text Transfer Protocol

- HTML을 전송하기 위한 프로토콜입니다.

 

SSL 인증서란?

- 브라우저가 처음으로 서버에 접속한 직후 서버는 브라우저에게 인증서정보를 전달해줍니다.

- 브라우저에 저장된 CA 리스트를 확인해서 인증된 인증서인지 확인하는 절차를 거친 후, 데이터를 교환하는 과정을 거칩니다.

 

대칭키와 공개키

대칭키 암호화 방식

- 123 -> 234 로 변환 시, 대칭키(각 자리를 1씩 더해준다는 정보)를 알고있다면 암호화 및 복호화를 할 수 있습니다. 

- 이 정보(대칭키)는 브라우져와 서버만 아는 비밀정보여야하는데, 공개적으로 올려놓게 되면 누구나 암/복호화를 할 수 있게 되기 때문에 둘만 알아야합니다.

공개키 암호화 방식

- 키가 2개입니다.

- 대칭키의 단점을 극복하였습니다.

- A,B의 키가 있습니다.

- A키는 B키로 복호화할 수 있고, B키는 A키로 암호화할 수 있습니다.

- A,B 둘중 하나는 비공개키, 하나는 공개키로 지정해야합니다.

- 비공개키는 절때 노출되어서는 안되지만, 공개키는 누구나 볼 수 있는 키로 냅둡니다.

- 공개키로 암호화한 정보는 비공개키를 가진 사람만이 복호화할 수 있습니다.

- 비공개키로 암호화된 정보는 공개키로 복호화할 수 있습니다. ( 이거 진짜 당연한 말인데, 공개키로 누구나 복호화할 수 있다는게 중요합니다. )

 - 공개키로 복호화되었다는 말은, 이 정보는 CA에서 비밀키로 암호화된 정보라는 사실이 보증이 된다는 사실입니다.

- 정보 보호라는 목적 대신, CA에서 제공된 인증서라는 사실을 알리는 것이 목적입니다.

- 이러한 상황을 전자서명이라고 부릅니다.

 

전자서명

- 웹브라우저가 서버에 접속 시, 서버는 제일먼저 인증서를 제공합니다.

- 브라우저에서는 이 인증서를 발급한 CA가 자신이 내장한 CA 리스트에 있는지 확인합니다.

- 확인 결과 서버를 통해서 다운받은 인증서가 내장된 CA 리스트에 포함되어있다면, 해당 CA의 공개키를 이용해서 인증서를 복호화해봅니다.

- 복호화가 되었다는 의미는 인증서가 CA의 비공개키에 의해서 암호화되었다고 보는 것입니다.

- 서버에서 제공된 인증서는 CA에 의해서 발급된 것임을 알 수 있습니다.

 

SSL 동작 방식

- 가장 이상적인 방법은 서로의 공개키를 전송해서 각자 가지고 있는 비밀키로 복호화하는 것입니다.

- 컴퓨팅파워를 많이 사용하기 때문에 서버부하의 이슈가 발생합니다. 

- 이를 해결하기 위해 실제 데이터는 대칭키 방식의 암호화를 사용하고, 대칭키의 키는 공개키 방식으로 암호화하는 SSL방식을 사용합니다.

- SSL 진행은 크게 악수, 전송, 종료 3단계로 진행됩니다.

악수

- HandShake라고 불리우는 이 방식은 상대방이 존재하는지, 상대방과 데이터를 주고받을 때 어떤 방식을 이용하는지 확인하는 작업에서 사용됩니다.

- Client Hello, Server Hello 작업을 진행합니다.

 Client Hello

- 랜덤한 데이터와 자신이 가진 암호화방식을 전송합니다.

Server Hello

- 랜덤한 데이터와 서버가 선택한 클라이언트의 암호화방식, 인증서를 전송합니다.

 

- Server Hello 이후, 클라이언트에서 인증서를 통해 전자서명을 진행합니다.

- 전자서명 이후 pre master secret key 를 생성하고, 이를 서버에서 제공한 인증서 내부의 공개키로 암호화합니다.

- 서버의 비밀키로 pre master secret key 를 복호화합니다.

- 이로서 브라우저와 서버만 pre master secret key를 알게 되었습니다 !

- 서버는 pre master secret key를 이용하여 session key를 생성하는데, 이는 대칭키로 활용됩니다. 

세션

- 둘만 아는 대칭키로 데이터를 주고받습니다

종료

- 세션키를 삭제합니다.

 

 

참고문헌

초보몽키의 개발 블로그

생활코딩

반응형