❗️HTTP(HyperText Transfer Protocol)
클라이언트와 서버 간 데이터 전송을 위한 통신 프로토콜이다.
HTTP에는 문제점이 있다.
- 암호화하지 않은 통신 -> 누구든 알아볼 수 있음
- 통신 상대를 확인하지 않음 -> 낮은 신뢰성
따라서 정보에 대한 정확성이 떨어지고, 서버와 클라이언트가 보낸 정보를 중간에 누군가 바꾸거나 탈취할 위험성이 있다.
이런 단점들을 보안하기 위해 나온 것이 HTTPS이다.
❗️HTTPS(HyperText Transfer Protocol Secure)
HTTPS는 HTTP에 보안(Secure)를 더한 것이다.
HTTPS는 위에 나온 HTTP의 단점을 해결해준다.
- SSL/TLS를 사용해 데이터를 암호화 -> 통신하는 정보들을 제 3자가 보더라도 알아보지 못함
- 대칭키와 비대칭키 암호화 방식을 사용하여 신뢰할 수 있는 상대인지 확인 -> 접속한 사이트가 믿을 만한 사이트인지 알려줌
SSL/TLS란 암호화 기반 인터넷 보안 프로토콜으로 개인 정보 보호, 인증, 데이터 무결성을 위해 개발된 것이다.
로그인하는 경우를 예시로 보자.
http를 사용한다면 내가 입력한 아이디와 비밀번호가 입력한 텍스트 그대로 보내져서 노출될 위험이 있다.
https를 사용한다면 텍스트를 암호화해서 보내기 때문에 노출될 위험이 줄어든다.
노출이 된다 하더라도, 데이터가 암호화되어 있기 때문에 복호화하기가 어렵다.
이러한 이유로 https를 사용한다!
HTTPS의 보안 방식에는 대칭키 암호화 방식과 비대칭키 암호화 방식이 혼합되어 사용된다.
그러므로 대칭키 암호화 방식과 비대칭키 암호화 방식에 대해 먼저 알아보자!
❗️대칭키 암호화 방식과 비대칭키(공개키) 암호화 방식
대칭키
- 클라이언트와 서버가 동일한 키를 가지고 암호화와 복호화를 진행한다.
- 연산속도가 빠르다는 장점이 있다.
- 키 전송 시, 누군가가 가로채면 문제가 생긴다는 한계가 존재한다.
- ex) AES, DES, RC4 ..
비대칭키(공개키)
- 1개의 쌍으로 구성된 공개키와 개인키(개인키)를 가지고 암호화와 복호화를 진행한다.
- 공개키로 암호화된 데이터는 개인키로만 복호화 할 수 있고,
개인키로 암호화된 데이터는 공개키로만 복호화 할 수 있다. - 클라이언트는 공개키로 암호화해서 데이터를 보내는데,
이 때 누군가 키를 가로채더라도 공개키만으로는 복호화를 할 수 없기 때문에 문제가 되지 않는다. - ex) RSA, DSA ECC ..
❗️HTTPS 동작 과정
우리의 브라우저에는 CA(Certificate Authority)들의 목록이 내장되어 있다.
브라우저 - CA의 인증을 받은 서버의 공개키가 저장됨
서버 - CA의 인증을 받은 인증서가 CA의 개인키로 암호화되어 저장됨
CA란 SSL 보안 인증서를 발급하는 기관을 의미한다.
- 클라이언트에서 서버로 랜덤 데이터를 생성해서 보낸다.
- 데이터를 받은 서버는 답변으로 서버 측에서 생성한 랜덤 데이터 + 해당 서버의 인증서를 실어서 보낸다.
(1번과 2번 과정을 handshake라고 함) - 클라이언트는 브라우저에 내장된 CA 목록을 통해 신뢰할 수 있는 인증서인지 확인하는데 이때 비대칭키 방식을 사용한다.
서버의 인증서를 브라우저에 저장된 해당 서버의 CA 공개키로 복호화가 가능하다면 신뢰할 수 있다는 것이다.
복호화된 인증서에는 서버의 공개키가 포함되어 있다.(CA 공개키와는 다른 키임) - 클라이언트는 handshake 과정에서 사용한 랜덤 데이터들을 혼합해서 대칭 키를 만들고,
3번 과정에서 얻은 공개키를 이용하여 대칭 키를 암호화하여 서버로 전송한다. - 서버는 자신의 개인키를 가지고 클라이언트로부터 받은 암호화된 대칭 키를 복호화 한다.
- 양쪽에서 일련의 과정을 거쳐서 동일한 대칭키를 만들고, 데이터 전송 시 대칭키를 사용한다.
대칭키는 서버와 클라이언트 둘만 가지고 있으므로, 누군가 데이터를 훔쳐 보더라도 다른 사람이 알아볼 수 없게 된다.
"비대칭키 방식을 사용해서 데이터를 주고 받으면 되지 않나?"라고 생각할 수 있겠지만
비대칭키 방식은 느리고 컴퓨터에게 많은 부담이 되기 때문에 대칭키 방식과 비대칭키 방식을 혼합해서 사용한다.
간단 요약하자면
대칭키를 공유할 때 ➡️ 비대칭키 방식 사용
데이터를 공유할 때 ➡️ 대칭키 방식 사용
❗️HTTPS를 꼭 사용해야 하나?
2014년, 구글에서는 https를 사용하면 검색 순위 결정에 가산점을 주겠다고 발표했었다.
2018년, SSL을 의무화하면서 SSL/TLS 인증서가 설치되지 않은 웹사이트에 패널티를 부여했다.
인증서가 설치되지 않은 웹사이트에 접속하면 경고를 표시한다.
실제 http를 사용한 사이트를 방문했을 때 뜨는 경고이다.
결국 사용자들은 안전한 사이트를 더 많이 방문하기 때문에 HTTPS를 사용하는게 여러모로 좋을 것 같당.
추가
2015년 SSL은 공식적으로 사용종료 되었고 현재 TLS 1.2 버전이 권장되고 있다!
현재는 모든 버전의 SSL이 더 이상 사용되지 않는다
'WEB' 카테고리의 다른 글
CDN (0) | 2024.06.17 |
---|---|
DNS (0) | 2024.06.16 |
JWT Token(+로그인) (5) | 2024.05.07 |
PWA란? (0) | 2023.05.14 |
CORS? 어떻게 해결하지? (0) | 2023.05.10 |