HTTP란?
: HyperText Transfer Protocol의 약자로
하이퍼텍스트를 전송하기 위해 사용되는 통신 규악
HTTP 서버는 기본 포트인 80번 포트에서 서비스 대기 중이며, 클라이언트(웹 브라우저)가 TCP 80 포트를 사용해 연결하면 서버는 요청에 응답하면서 자료를 전송한다. HTTP는 정보를 텍스트로 주고 받기 때문에 네트워크에서 전송 신호를 인터셉트 하는 경우 원하지 않는 데이터 유출이 발생할 수 있다.
이런 보안 취약점을 해결하기 위한 프로토콜이 HTTP에 S(Secure Socket)가 추가된 HTTPS이다.
HTTPS
HTTPS는 기본 골격이나 사용 목적 등은 HTTP와 거의 동일하지만, 데이터를 주고 받는 과정에 '보안'요소가 추가되었다는 것이 가장 큰 차이점이다. HTTPS를 사용하여 서버와 클라이언트 사이의 모든 통신 내용이 암호화된다.
우리가 특정 파일에 암호를 걸 때처럼 어떤 키를 설정해서 잠금을 걸고, 풀 때에도 그것을 입력해서 푸는 것을 생각해보자. 간단하게 생각하면 웹 서버가 키 하나를 정해 페이지를 암호화 해서 사용자의 웹 브라우저로 보내고, 웹 브라우저는 그 키를 이용해서 페이지를 복원하면 될 것이다. 그러나 웹 서버는 하나고 사용자는 불특정 다수이기 때문에 간단하지 않다. 그렇다고 키를 사용자들에게 막 줘버리면 아무나 암호화를 풀 수 있게 됨으로써 암호화의 의미가 없게 된다.
HTTPS는 위와 같은 상황에서 페이지를 암호화한 키가 그 페이지를 보는 특정 사용자에게만 알려지도록 한다. HTTPS는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화하며, 기본 TCP/IP포트는 443이고, SSL 프로토콜 위에서 HTTPS 프로토콜이 동작한다.
* TLS
: Transport Layer Security 의 줄임말. 과거 SSL 에서 발전하며 이름이 변경 된 것이다. 하지만 아직도 SSL 이란 명칭이 많이 사용되고 있다.
동작 과정
보안적인 부분은 더 이상 자세히 다루지 않고, 인증서 발급부터 어떤 식으로 사이트가 안전하게 사용자와 통신을 하는지 전체적으로 알아보면
* 아래 그림 및 설명에서 서버 = 사이트, 클라이언트 = 사용자로 나타내었다.
- 인터넷 사이트(서버)는 공개키와 개인키와 개인키를 만들고 신뢰할 수 있는 인증 기관(CA)에 자신의 정보와 공개키를 관리해달라고 계약하고 (경우에 따라) 돈을 지불한다.
- 이 때, 계약을 완료한 인증 기관은 기관만의 공개키와 개인키가 있다. 인증 기관은 사이트가 제출된 데이터를 검증하고, 인증 기관의 개인키로 사이트에서 제출한 정보를 암호화해서 인증서를 만들어 제공한다. 사이트는 인증서를 가지게 되었다.
- 인증 기관은 웹 브라우저에게 자신의 공개키를 제공한다.
- 사용자가 사이트에 접속하면 서버는 자신의 인증서를 웹 브라우저(클라이언트)에게 보낸다. 예를 들어, 웹 브라우저가 index.html 파일을 달라고 요청했다면, 서버의 정보를 인증 기관의 개인키로 암호화한 인증서를 받게 되는 것이다.
- 웹 브라우저는 3. 에서 미리 알고 있던 인증기관의 공개키로 인증서를 해독하여 검증한다. 그러면 사이트의 정보와 서버의 공개키를 알 수 있게 된다. (이 부분은 보안상의 의미는 없다. 단지 해당 서버로부터 온 응답임을 확실할 수 있게 된다.)
- 이렇게 얻는 서버의 공개키로 대칭키를 암호화해서 다시 사이트에 보낸다.
- 사이트는 개인키로 암호문을 해독하여 대칭키를 얻게 되고,
* 브라우저는 어떻게 CA의 공개키를 열까?
웹 브라우저에는 이미 root CA의 Internet Explorer나 Netscape와 같은 웹 브라우저에는 브라우저가 자동으로 신뢰하는 (즉, Versign, Thawte와 같은 널리 알려진 루트) CA 인증서 집합이 사전 구성되어 있습니다.
웹 브라우저는 모든 주요 인증 기관의 공개 키와 함께 설치됩니다. 이 공개 키를 사용하여 웹 서버의 인증서가 실제로 신뢰할 수 있는 인증 기관에 의해 서명되었는지 확인합니다.
즉, 웹 브라우저는 내부적으로 CA 리스트와 함께 공개키가 포함된 인증서를 가지고 있다.
HTTPS의 장단점
- HTTPS는 웹사이트의 무결성을 보호해준다. 웹 사이트와 사용자 브라우저 사이의 통신을 침입자가 건드리지 못하도록 한다. (침입자라함은, 악의가 있는 공격자는 물론이고, 합법이지만 통신에 침입하여 페이지에 광고를 삽입하는 경우도 해당한다.
- 가벼운 웹 서핑이라면 HTTP도 상관없지만, 사용자의 정보를 웹 서버와 주고 받아야하는 경우라면 HTTP는 정보 유출의 위험성을 갖게 된다. HTTPS는 침입자가 웹사이트와 사용자 사이의 통신을 몰래 수신하는 것을 방지함으로써 보안을 강화해준다.
- getUserMedia() 를 통한 사진 촬영이나 오디오 녹음, 프로그레시브 웹 앱과 같은 강력한 웹 플랫폼 신기능들은 실행하려면 사용자의 명시적인 권한 허락을 필요로 한다. 오래된 API 들도 실행할 때 권한이 필요하도록 업데이트 되고 있는데, HTTPS는 이러한 새 기능과 업데이트된 API에 대한 권한 허락을 가능하게 한다.
- 네이버, 다음은 물론이고 구글 역시 검색 엔진 최적화 관련 내용을 HTTPS 웹 사이트에 대해서 적용하고 있다. 즉, 키워드 검색 시 상위 노출되는 기준 중 하나가 보안 요소이다.
- 모든 사이트에서 텍스트를 암호화해서 주고 받으면 과부하가 걸려 속도가 느려질 수 있다. 중요한 사이트는 HTTPS로 관리하고, 그렇지 않은 사이트는 HTTP를 사용한다.
- HTTPS를 지원한다고 해서 무조건 안전한 것은 아니다. 신뢰할 수 있는 CA 기업이 아니라 자체적으로 인증서를 발급할 수도 있고, 신뢰할 수 없는 CA 기업을 통해서 인증서를 발급받을수도 있기 때문이다.
출처 :
https://rachel-kwak.github.io/2021/03/08/HTTPS.html
'컴퓨터개론' 카테고리의 다른 글
CURL (0) | 2022.06.20 |
---|---|
인공신경망 (Artificial Neural Network, ANN)의 종류 및 구조 (0) | 2022.06.17 |
챗봇이란? (0) | 2022.06.17 |
음성 인식(speech-to-text), 음성 합성(text-to-speech) (0) | 2022.06.17 |
Internet of Things (IoT) (0) | 2022.06.17 |
댓글