HTTPS와 HTTP의 차이는 암호화 프로토콜이 적용되있느냐의 유무다.
HTTPS의 경우, 과거 SSL이 적용되고 있었으나, SSL의 취약점으로 인해 SSL 3.0 부터는 TLS가 SSL을 계승하여 사용된다.
SSL과 TLS는 다른 방식이며, TLS가 더 진화한 방식이지만 용어 자체는 혼용되어 사용된다.
TLS의 개념 정리를 위해서는 선행되는 개념들도 함께 정리가 필요하다.
암호화에 사용되는 키와, 복호화에 사용되는 키가 같다면 대칭키 암호화,
다르다면 비대칭키 암호화라고 부른다.
키가 탈취되면 암호화/복호화가 둘 다 되서 보안 리스크
비대칭키 암호화에선 2개의 키가 존재한다.
2개의 키를 A, B라고 칭할 때,
해당 방식을 사용하면, 암호화는 전송자측에서만 할 수 있기에 source를 신뢰할 수 있게 된다.
하지만 CPU 리소스를 크게 소모한다.
TLS는 대칭키와 비대칭키의 RSA방식을 모두 차용한다.
맨 처음에, 대칭 키를 서로 공유하는 과정을 RSA 비대칭키 방식으로 이용하고,
실제 통신을 할 때는 CPU 리소스가 적게 소모되는 대칭키 방식으로 데이터를 주고 받는다.
(이때 사용되는 대칭키는 세션키라고 지칭하여, 통신이 끝나면 폐기된다.)
또한 TLS에서는 공개 키를 주고받는 과정에서 인증서(CRT)를 사용하게 되는데, 인증서가 무결한지 검증하는 과정 또한 수행하게 된다.
오픈소스 라이브러리 Openssl을 사용하여 셀프 인증서를 발급할 수 있다.
$ openssl req \ -x509 \ -newkey rsa:4096 \ -nodes \ -keyout ${PATH}/XXX.key \ -out ${PATH}/XXX.crt
위 기재된 통신 과정은 대략적인 과정이며, TLS handshake의 인증서 검증 과정 등은 생략되어있다.
TLS handshake 참고 URL: https://brunch.co.kr/@sangjinkang/38
HTTPS는 가장 기본적인 단계라 모든 상황에서도 안전하지는 않다.
Https는 유지되지만 전달하는 내용은 고스란히 노출된다.
그에 따라 민감한 데이터 전달에서는 HTTPS와 함께 E2E 암호화 기술을 함께 적용하여 HTTPS가 무력화되도 데이터가 복호화되지 않도록 대비해야 한다.