[ http(Hyper Text Transfer Protocol) ]

  •  W3상에서 정보를 주고받을 수 있는 프로토콜
  • 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜(request / response)
  • 주로 html문서를 주고받을 때 사용
  • 주로 TCP를 사용하고 HTTP/3부터는 UDP를 사용하며, 80번 포트를 사용
  • HTTP를 통해 전달되는 자료는 http:로 시작하는 URL로 조회 가능

 

[ https(Hyper Text Transfer Protocol Secure) ]

  • http의 보안이 강화된 버전
  • 전자상 거래에서 많이 사용됨
  • https는 소켓 통신에서 일반 텍스트를 이용하는 대신에,SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 따라서 데이터의 적절한 보호를 보장
  • https의 기본 TCP/IP 포트는 443
  • https를 사용하는 웹페이지의 URI는 'http://'대신 'https://'로 시작한다.

 

[ 암호화 방식 ]

  • 대칭키 암호화
    • 클라이언트와 서버가 같은 키를 사용하여 암호화/복호화
    • 빠른 연산 속도
    • 키가 노출되면 매우 위험함
  • 비대칭 키 암호화
    • 공개키와 개인키 한 쌍으로 구성, 암호화/복호화 시 사용
    • 느린 연산 속도
    • 키가 노출되어도 비교적 안전함

[ TPC / UDP ]

  • TCP
    • 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
    • udp에 비해 속도가 느림
    • 서버와 클라이언트는 1:1 연결
    • 스트림 전송으로 데이터 크기의 제한이 없음
  • UDP
    • 데이터를 데이터그램 단위로 처리하는 프로토콜
    • tcp 보다 속도가 빠름
    • ip기반으로 데이터 전송
    • 서버와 클라이언트는 1:1, 1:N, N:M으로 연결
    • 데이터그램(메시지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보냄

[ SSL / TLS ] * 상세는 다음 포스팅에 다룰 예정

  • SSL(Secure Socket Layers)
    • 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약
  • TLS(Transport Layer Security)
    • SSL이 표준화되면서 바뀐 이름

[ https 동작 ]

  1. 클라이언트가 서버로 최초 연결 시도
  2. 서버는 공개키(인증서)를 브라우저에게 넘겨줌
  3. 브라우저는 인증서의 유효성을 검사하고 세션 키를 발급
  4. 브라우저는 세션 키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송
  5. 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
  6. 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션 키로 암호화/복호화를 진행

[ https 발급 ]

  1. HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키를 발급
  2. 인증기관에게 돈을 지불하고, 공개키를 저장하는 인증서의 발급을 요청
  3. 인증기관의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성
  4. 인증기관의 개인키로 암호화하여 요청자에게 이를 제공
  5. 클라이언트에게 암호화된 인증서를 제공
  6. 브라우저는 인증기관의 공개키를 미리 다운로드하여 갖고 있어, 암호화된 인증서를 복호화
  7. 암호화된 인증서를 복호화하여 얻은 공개키로 세션 키를 공유함

 

[ 사용 ]

일반적으로 호스팅 시에는 http를 사용해도 무방하다고 생각한다. 하지만 배포해야 될 페이지가 회원들의 개인정보를 중요하게 다뤄야 하거나 페이지에 쌓이는 데이터가 중요한 정보라면 https를 통해 보안을 강화하는 것이 좋다고 생각한다.

https를 발급받아 사용하려면 위와 같은 번거로운 절차가 필요하고 금전적인 부분이 부담스러울 수도 있지만 정보 유출 등은 매우 심각한 문제이기 때문에 보안에 잘 신경을 쓰는 것이 좋다.

'웹 기초' 카테고리의 다른 글

JAVA 1.8 신 기능  (0) 2022.02.04
VO(Value Object) vs DTO(Data Transfer Object) and Entity  (0) 2022.02.03
에자일 방법론(Agile)  (0) 2022.02.01
WebServer vs WAS  (0) 2022.01.31

+ Recent posts