Hyper Text Transfer Protocol Secure
암호화 원리
- 암호화에는 두가지 키가 필요하다. 암호화할 때 사용하는 키, 복호화 할때 사용하는 키
- 암호화, 복호화가 같은 키라면
'대칭 키' 암호화 방식
, 다르면 두개의 키가 존재하므로 '비대칭키' 암호화 방식 또는 공개키 암호화 방식
이라고 한다.
공개 키 (비대칭키)암호화 방식
- 두개의키가 필요하고 각각
공개키
, 비밀키
라고 부른다
- 공개키는
누구나 접근가능한 키
로 공개키를 이용해서 암호화한 데이터를 보내면 비밀키를 가진 사람만 복호화
할수 있다.
- 보통 보내는쪽이 클라이언트 받는 쪽이 서버가 되고 서버를 해킹해서 비밀키를 가져가지 않는이상 노출될일은 없다.
- 대칭키방식은 암호화한데이터를 탈취하면 같은 대칭키로 복호화할수 있으므로 비대칭키 방식은 대칭키 방식보다 보안성이 좋다. 하지만 복잡한 연산이 필요하므로 처리시간이 더필요하다.
HTTPS 암호화 방식
TLS
- HTTPS는 SSL 또는 TLS프로토콜을 사용하여 서버인증과 데이터 암호화를 진행한다.
- CA를 통한 인증서 사용
- 대칭키, 공개키 암호화 방식을 모두 사용
CA ( Certificate Authority )
- 인증서를 발급해주는 공인된 기관들을
CA
라고 한다.
- HTTPS를 사용하는 브라우저는 서버의 응답 + 인증서를 확인한다.
인증서 발급 절차
- 인증서를 발급받기위해 서버는 CA로
서버의 정보와 공개 키를 전달
한다.
- CA는 서버의 공개키와 정보를
CA비밀키로 암호화
하여 인증서를 발급한다.
클라이언트의 인증서 복호화 과정
- 클라이언트가 서버에 인증서 요청
- 서버는 CA에게 발급받은 인증서 전송
- 클라이언트 브라우저에 내장된 CA리스트로 CA가 발급한 인증서인지 확인한다.
- 검증된 인증서라면 브라우저에 내장된 CA공개키로 인증서를 복호화 한다.
- 복호화가 성공하면 신뢰할 수 있는 서버고 실패하면 인증서는 신뢰할수 없는 인증서 이다.
대칭 키 전달 과정
- 공개키(비대칭키)로 데이터를 주고받으면 복잡한 연산으로 인해 시간이 많이 소비된다 따라서 공개키를 이용하여 대칭키를 주고 받을 때 사용하고
실질적인 통신은 대칭키
를 이용하여 한다.
- 클라이언트가 공개키로 대칭키를 암호화하여 서버에 전송한다.
- 서버는 서버의 비밀키로 클라이언트가준 대칭키를 복호화하고 이제 대칭키로 통신한다.
- 클라이언트가 공개키로 암호화한 대칭키를 중간에 가로채도 서버의 비밀키가 없으면 복호화를 할 수 없으므로 안전한다.
- 또한 대칭키 자체는 오고가지 않기 때문에 중간에 가로챌 수 없다.
정리
서버와 클라이언트간의 CA
를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우른 프로토콜을 SSL 또는 TLS
이라고 말하고, HTTP에 SSL/TLS 프로토콜을 더한 것
을 HTTPS
라고 한다.
사설 인증서
- mkcert 프로그램으로 사설인증서를 만들 수 있다.
- ngrok을 이용하여 HTTPS로 터널링 할 수 있다.(HTTP로 만들어진 서버를 HTTPS로)