HTTP
- Hypertext Transfer Protocol
- 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜
- 암호화되지 않은 방법으로 데이터를 전송하여 안전하지 않다.
HTTPS
- Hypertext Transfer Protocol Over Secure Socket Layer
- 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다.
- HTTPS 는 HTTP 하부에 SSL 같은 보안 계층을 제공한다.
SSL (Secure Sockets Layer)
- 암호화 기반 인터넷 보안 프로토콜- 인터넷 통신의 암호화, 인증, 데이터 무결성을 보장하기 위해 개발됨.- 웹에서 전송되는 데이터를 암호화한다. - TLS 암호화의 전신이다.- 1996년 SSL 3.0 이후 업데이트 되지 않았으며, 앞으로 사라지게될 것으로 여겨지고 있다. SSL 프로토콜에는 알려진 취약성이 여러가지 있으며 보안 전문가들은 SSL 사용을 중단하라고 권장한다. 실제로 최신 웹 브라우저는 대부분 이제 SSL을 지원하지 않으며, SSL을 제공하는 업체는 사실상 TLS보호를 제공하는 것이다.
암호화 : 제 3자로부터 전송되는 데이터를 숨김
인증 : 정보를 교환하는 당사자가 요청된 당사자임을 보장
무결성 : 데이터가 위조되거나 변조되지 않았는지 확인
암호화 방식
대칭키
- 암호화 · 복호화할 때 사용하는 키가 동일한 방식
- 키가 한 개 뿐이므로 유출되어선 안됨
- 비대칭키보다 속도가 빠르다.
비대칭키(공개키)
- 암호화 · 복호화할 때 사용하는 키가 서로 다른 방식
- Private Key와 Public Key가 함께 존재한다.
- Private Key로 암호화한 데이터는 Public Key로 복호화할 수 있고, Public Key로 암호화한 데이터는 Private키로 복호화할 수 있다.
CA 기관 (Certificate Authority, 인증기관)
브라우저가 접속하고자 하는 서버의 SSL 인증서를 받으면 이것이 진짜인지 가짜인지 검증해주는 기관이다.
클라이언트와 서버 둘 다 신뢰하는 기관.
SSL 인증서(TLS 인증서)
인증서는 개인이 만드는 사설 인증서와 CA기관에서 발급한 공인 인증서가 있다.
- 웹브라우저는 CA 기관들의 Public Key를 이미 알고 있다.
- 서버에서 CA 기관에 서버 정보와 자신의 Public Key를 담아 SSL 인증서 발급 요청을 한다.
- CA 기관은 서버의 SSL 인증서를 발급한다.
- SSL 인증서에 서버의 도메인을 비롯한 서버를 인증해주는 정보들을 담고
- Private Key와 Public Key 한쌍을 새로 생성하여 담아준다.
- 인증기관의 Private Key로 암호화하여 서버에 전달한다.
- 서버와 브라우저가 통신하려고 하면 서버는 브라우저에게 SSL 인증서를 전달한다.
- 브라우저는 SSL 인증서를 검증하기 위해 CA 기관의 Public Key로 SSL 인증서를 복호화한다.
- 복호화에 성공하면 SSL 인증서가 진짜라는 것이고, 복호화에 실패하면 진짜가 아니거나 CA기관에서 발급한 인증서가 아니라는 뜻이다. (주소창에 빨간색으로 신뢰할 수 없는 사이트라고 뜨는 경우)
- 복호화한 SSL 인증서에서 서버의 Public Key를 얻었고, 웹브라우저는 이제 서버를 신뢰한다. 이제 서버의 공개키로 실제 데이터 암호화에 사용할 대칭키를 암호화하여 서버에게 전송한다.
- 서버는 웹브라우저가 자신의 Public Key로 암호화하여 전달한 대칭키를 자신의 Private Key로 복호화한다.
- 이제부터 서버와 브라우저는 대칭키 방식으로 암호화 통신을 할 수 있다.
HTTPS를 써도 성능이 떨어지지 않는 이유는 최종적으로 대칭키 방식으로 동작하기 때문이다.
Reference
https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/
https://aws-hyoh.tistory.com/59
HTTPS 통신과정 쉽게 이해하기 #5(CA, 인증기관)
지난 #1, #2, #3, #4 문서에서 서버가 보유한 SSL 인증서를 인증기관(CA)이 발급한다고 설명했습니다. 그렇다면 도대체 이 인증기관(CA)은 무엇일까요? 그리고 내가 사용하는 브라우저는 접속하는 웹
aws-hyoh.tistory.com
'백엔드' 카테고리의 다른 글
JPA 개념 (2) | 2023.04.29 |
---|---|
JAR 와 WAR (2) | 2022.06.20 |
리액티브 프로그래밍 (Reactive Programming) (1) | 2022.06.13 |
도커(docker)에 톰캣(tomcat) 설치하기 (0) | 2022.06.08 |