본문 바로가기

개발상식

[네트워크] HTTP vs HTTPS

인터넷을 사용하면서 주소창에 가장 많이 사용되는 형식은 http 혹은 https 로 시작되는 도메인이다. 우리는 이 주소창에 해당 양식의 url 을 입력하면 목표하는 웹사이트로 이동하게 된다. 서버에서는 무슨 일이 벌어지고 있는 것일까. 이 url에 숨겨진 내용은 무엇일까.

www는 World Wide Web의 줄임말

 

💡 도메인 DNS (Domain Name Service)

  • IP 주소와 도메인 명을 서로 교환하는 장치
  • 인터넷에서는 컴퓨터 식별을 위해 IP 주소를 사용하는데 여기 이름을 붙인 것이다.
  • DNS 서버는 트리 구조로 이뤄졌다.

 

HTTP

  • HyperText Transfer Protocol
  • W3 상에서 정보를 주고받을 수 있는 프로토콜(규칙, 규약)
  • 클라이언트와 서버 간 데이터(텍스트/이미지/동영상 등)를 주고 받기 위한 프로토콜
  • OSI 7계층에서 Application Layer(7 Layer) 에서 결정된다.
  • 80번 포트

브라우저(애플리케이션)을 통해 확인하는 웹 상 데이터는 HTTP에 의해 전달된다. 사용자는 URL만 알면 된다. 브라우저창에 URL을 입력하면 브라우저는 데이터를 가져온다. 데이터를 전달하는 것은 웹 서버의 역할이고 HTTP는 그 클라이어트와 서버 간 규칙이다. 클라이언트가 서버에 전송하는 것은 HTTP Request, 서버에서 클라이언트로 답하는 것은 HTTP Response 로 부른다.

 

그렇다면 HTTP와 HTTPS 의 차이는 무엇일까.

 

HTTPS는 웹 서버와 브라우저 사이 정보를 암호화된 상태로 주고받지만 HTTP는 정보를 평문으로 주고받는다. 만약 쇼핑 웹사이트에서 주문하는 과정에서 신용카드 번호를 입력했다고 하자. 이 신용카드 번호는 암호화되지 않은 채 인터넷을 이동하게 된다. 암호화된 상태의 정보보다 평문 상태의 정보는 탈취되었을때 악용될 위험이 크다. 그래서 확장 버전인 HTTPS 가 등장했다.

 

HTTPS

  • HyperText Transfer Protocol Secure
  • 기존의 HTTP 프로토콜에 SSL(Secure Sockets Layer) 프로토콜을 더해 보안을 강화한 통신규약
  • HTTP 하부에 SSL/TLS 과 같은 보안 계층을 제공하여 동작한다.

 

SSL과 TLS

SSL은 TLS(Transport Layer Security)이라는 또 다른 프로토콜의 바로 이전 버전이다. SSL 업데이트 중 Netscape 가 참여하지 않으면서 소유권 변경에 따라 TLS로 이름이 변했다.(비스트가 하이라이트가 된 것처럼)

 

SSL 최종 버전(3.0)도 TLS 첫 버전의 차이는 크지 않다. TLS를 아직 SSL이라 부르기도 하고, SSL의 인지도가 높으므로, ‘SSL/TLS 암호화’라 부르는 경우도 있다.

 

SSL은 1996년 SSL 3.0 이후 업데이트되지 않았으며, SSL 프로토콜에 알려진 취약성이 여러가지가 있어 SSL 사용을 중단하는 것이 좋다. 실제로, 최신 웹 브라우저는 대부분 이제 SSL을 지원하지 않는다.

 

TLS는 현재 온라인으로 실행되고 있는 최신 암호화 프로토콜인데, 아직 이를 "SSL 암호화"라고 부르기도 한다.

 

SSL/TLS 는 어떻게 정보를 지킬까?

  1. 인증
  2. 데이터 무결성
  3. 암호화

 

SSL 인증

SSL은 SSL 인증서(TLS 인증서) 가 있는 웹사이트만 실행가능하다. 이 인증서는 신분증처럼 웹사이트나 애플리케이션 서버가 웹에 저장하고 표시한다.

이 인증서를 이용해 브라우저와 서버는 보안 연결을 수립하게 된다. 이 과정을 SSL 핸드쉐이크 과정이라 부른다.

1. 브라우저

  • SSL(https)로 보호된 웹 서버(웹 사이트)에 연결한다.
  • 브라우저에서 서버가 자신의 신원을 증명하도록 요청을 보낸다.

 

2. 서버

  • 서버의 공개키를 포함한 자신의 SSL 인증서 사본을 전송한다.

 

3. 브라우저

  • 공인 인증기관 목록과 대조하여 인증서 루트를 확인한다.
  • 인증서의 만료, 해지 여부를 확인하고 연결하는 웹사이트의 도메인이 유효한지 확인한다.
  • 브라우저가 인증서를 신뢰할 경우 서버의 공개키를 사용해 세션 키를 생성하고 암호화한 후 다시 전송한다.

 

4. 서버

  • 서버의 개인키를 사용해 대칭키를 복호화하고 세션키로 암호화된 승인을 회신하여 암호화된 세션을 시작한다.

 

5. 서버와 브라우저가 이제 전송되는 모든 데이터를 세션키로 암호화한다.

 

💡 SSL 인증서 발급을 담당하는 기관은 CA(인증기관)이다.

 

 

 

 

SSL 연결을 설정하는 데에는 공개 키, 개인 키, 세션 키라는 세 가지 키가 사용된다. 비대칭키를 이용해 대칭키를 만들고 이 대칭키를 세션키라고 부른다.

 

 💡 공개 키로 암호화된 모든 데이터는 개인 키로만 해독할 수 있으며, 그 반대도 마찬가지이다.

  • (비대칭키1) 공개키 → 암호화 : 개인키로 해독
  • (비대칭키2) 개인키 → 암호회 : 공개키로 해독
  • (대칭키) 세션키

정리

HTTPS는 SSL 프로토콜을 활용해 브라우저에 접근할 때 사용하는 HTTP 프로토콜의 확장 버전이다. 브라우저는 SSL 인증서를 이용해 SSL 핸드 셰이크라는 프로세스를 사용해 SSL 연결을 수립한다.

 

비대칭키(개인키, 공개키)를 사용한 암호화와 복호화는 많은 처리 능력을 요구하기 때문에 대칭 세션 키(symmetric session key)를 생성하기 위한 SSL 핸드셰이크 중에만 사용된다. 보안 연결이 설정된 후에는 전송되는 모든 데이터에 (대칭키)세션 키가 사용된다.

 

SSL은 매번 성능을 개선시키며 1999년에는 TLS로 업데이트됐다. SSL 방식은 알려진 보안 취약점이 많아 TLS 를 사용할 것을 권장하며 현대에서 SSL 과 TLS 를 거의 구분 없이 부르기도 한다.

'개발상식' 카테고리의 다른 글

Polling, Long Polling, Socket, SSE  (0) 2024.05.29