본문 바로가기
Stg

HTTPS

by 호랑2 2023. 4. 22.

HTTP 통신은 암호화 되지 않은 평문으로 실시된다. 또한 HTTP 에는 통신 상대의 서버나 클라이언트를 인증하는 수단이 없다.

때문에 실제로는 의도한 통신 상대와 통신하지 않고 있을 가능성이 있고, 수신한 메시지가 도중에 변조되어 있을 가능성도 있다.

 

이러한 문제를 해결하기 위해 암호화와 인증과 완전성 보호 같은 구조를 HTTP 에 추가한 것을 HTTPS(HTTP Secure) 라고 한다.

HTTPS 는 새로운 응용계층 프로토콜은 아니다. 보통 HTTP 는 직접 TCP와 통신하지만, SSL을 사용한 경우에는 HTTP 는 SSL 과 통신하고 SSL 이 TCP 와 통신하게 된다. 

 

출처 : https://sangminlog.tistory.com/entry/ssl-tls

 

  1. 클라이언트 → 서버로 랜덤 데이터와 사용 가능한 암호화 방식을 보낸다.
  2. 서버 → 클라이언트로 랜덤 데이터, 사용할 암호화 방식과 SSL 인증서를 보낸다.
  3. 클라이언트는 서버에게 받은 인증서의 CA가 자신이 들고 있는 CA 리스트에 있는지 확인하고, 있다면 CA의 공개키로 복호화한다. 이는 곧 CA 비밀키에 의해 암호화됐다는 것이므로 인증서의 신원을 보증해준다. (공개키 암호화 방식)
    클라이언트는 자기가 보낸 랜덤 데이터와 서버로부터 받은 랜덤 데이터를 조합하여 임시 키 (pre master secret key)를 만든다.
  4. 만들어진 임시 키를 인증서의 공개키로 암호화하여 서버에게 보낸다.
  5. 서버는 자신이 들고 있던 비밀키로 임시 키를 복호화한다.
  6. 이로써 클라이언트와 서버는 동일한 임시 키를 공유하게 되는데, 일련의 과정을 거쳐 master secret 값을 만들고 세션 키를 생성한다.
  7. 이렇게 만들어진 세션 키로 암호화된 데이터를 주고받는다. (대칭키 암호화 방식)
  8. 세션이 종료되면 클라이언트와 서버 모두 세션 키를 폐기한다.

'Stg' 카테고리의 다른 글

프로젝트 관리 - Agile  (0) 2024.03.14
블록체인 (blockchain)  (0) 2024.03.13
HTTP의 보안상 약점  (0) 2023.04.18
HTTP 헤더  (0) 2023.04.14
HTTP와 연계하는 웹 서버  (0) 2023.04.12

댓글