랑아
article thumbnail
Published 2023. 4. 22. 18:40
HTTPS 기초 CS/인증&보안

HTTPS

HTTPS 개념

HTTPS는 Hyper Text Transfer Protocol Secure Socket layer의 약자로 HTTP over SSL(TLS), HTTP over Secure라고 부르기도 한다.
HTTPS는 HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해, HTTP 통신을 하는 과정에서 데이터를 암호화하여 전송하는 방법이다.

HTTPS의 사용 목적은 다음과 같다.

  • 암호화
  • 인증서

암호화

암호화는 제삼자가 서버와 클라이언트가 주고 받는 정보를 탈취할 수 없도록 하는 것이다.
이를 위해 서버와 클라이언트는 서로가 합의한 방법으로 데이터를 암호화하여 주고 받는다. 따라서 중간에 제삼자에게 데이터가 탈취되더라도 그 내용을 알아볼 수 없다. HTTP는 요청 및 응답이 탈취된다면 전달되는 데이터의 내용을 제삼자가 그대로 확인할 수 있지만, 데이터를 암호화하여 전송하는 HTTPS를 사용한다면 비밀번호와 같은 중요한 데이터가 유출될 가능성이 HTTP보다 현저히 적어진다.

HTTPS에서는 클라이언트와 서버가 데이터를 암호화하여 주고받기 위해 비대칭키 방식과 대칭키 방식을 혼용하여 사용한다.

서버와 클라이언트가 통신할 때, 대칭키 방식은 양쪽이 공통의 비밀 키를 공유하여 데이터를 암호화 및 복호화하는 것, 비대칭키 방식은 각각 공개키와 비밀키(개인키)를 가지고 상대가 나의 공개키로 암호화한 데이터를 개인이 가진 비밀키로 복호화하는 것을 의미한다.

클라이언트와 서버가 데이터를 주고받을 때는 대칭키를 사용한다. 비대칭키 알고리즘은 대칭키 알고리즘보다 훨씬 복잡하기 때문에 대칭키를 사용하여 데이터를 암호화 및 복호화하는 것이 훨씬 컴퓨터에 부담을 덜 주기 때문이다.

그런데 대칭키를 서로 주고받는 과정에서부터 정보가 탈취될 수 있기 때문에, HTTPS는 이러한 대칭키를 주고받을 때는 비대칭키 방식으로 주고 받도록 한다.


인증서

HTTPS의 또 다른 특징 중 하나는 브라우저가 서버의 응답과 함께 전달된 인증서를 확인할 수 있다는 것이다. 인증서는 서버의 신원을 보증하여 접속한 웹사이트가 카피된 것이 아님을 보장해주는 역할을 한다.

이를 보증할 수 있는 제삼자를 Certificate Authority, CA라고 부른다.
CA는 인증서를 발급해주는 엄격하게 공인된 기관들을 말하며, CA들은 서버의 공개키와 정보를 CA의 비밀키오 암호화하여 인증서를 발급한다.

인증서는 발급한 CA, 서명에 사용한 알고리즘, 서명, 공개키 정보 등이 들어 있다.

인증서 인증 과정

서버가 클라이언트에게 CA에게 발급받은 인증서를 전달하면 클라이언트는 OS 또는 브라우저에 미리 내장되어 있던 CA 리스트를 통해 브라우저에서 인증된 CA에서 발급받은 인증서인지 확인한다. 만약 인증된 CA에서 발급한 인증서가 아니라면 화면에 경고창의 띄워 서버와 연결이 안전하지 않다는 화면을 보여준다. 그 후, 인증서가 확인되었다면 브라우저에 제공된 해당 CA 기관의 공개키로 서버 인증서를 복호화한다. 서명을 복호화해 얻은 공개키로 클라이언트는 서버가 믿을만한 대상인지 신뢰할 수 있다.

브라우저는 인증서의 도메인과 데이터를 제공하는 서버의 도메인을 비교할 수 있으므로 '중간자 공격'을 감지하여 보안 위협으로부터 사용자 및 사용자의 데이터를 보호할 수 있다. 또한, CA에서 발급한 인증서가 아닐 경우 경고창의 띄워줌으로써 브라우저들은 인증된 CA가 발급한 인증서를 이용하여 데이터를 제공하는 안전한 서버를 사용자가 사용하도록 유도한다.

여기서 서버와 클라이언트 간의 CA를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우른 프로토콜을 TLS 또는 SSL이라고 말한다.(SSL과 TLS는 사실상 동일한 규약을 뜻하며 SSL이 표준화되며 바뀐 이름이 TLS이다.)

'CS > 인증&보안' 카테고리의 다른 글

Session 기초  (0) 2023.04.23
Cookie 기초  (0) 2023.04.22
Hashing 기초  (0) 2023.04.22
profile

랑아

@RangA

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!