[CS] 2. HTTP, HTTPS, SSL

Fly High!·2020년 10월 1일
0

CS Knowledge

목록 보기
2/2
post-thumbnail

HTTP (Hyper Text Transfer Protocol)

특징

  • 인터넷 상에서 데이터를 주고 받기 위한 Protocol(규약)
  • Client와 Server 사이에서 Hyper Text를 기반으로 데이터를 주고 받음
  • 암호화가 돼있지 않기 때문에 http로 사용했을 때, 크롬에서 '안전하지 않은 사이트'라고 경고가 뜸

HTTPS (HTTP + Over Secure Socket Layer)

특징

  • 암호화 되지 않은 HTTP의 단점을 보완하기 위해 보안을 강화
  • 교환되는 모든 데이터 정보를 암호화 시켜서 작동
  • TCP/IP와 HTTP 사이에서 SSL 같은 보안계층을 적용하여 동작

SSL

특징

  • 클라이언트와 서버 간의 통신을 제 3자가 보증해주는 전자화된 문서
  • 서버에 접속하면 서버는 클라이언트에게 SSL 인증서 정보를 전달하고 이를 검증한 클라이언트는 다음 절차를 수행
  • 향상된 보안과 통신 내용의 악의적 행위들을 사전에 방지할 수 있음

대칭키

  • 암호화를 할 때, Key값을 지정하는데 해당 값에 따라 암호화된 결과가 달라짐 그래서 key값을 모르면 복호화 불가능
  • 대칭키는 동일한 키 값으로 암호화와 복호화가 가능한 기법을 의미
  • 공개키 방식에 비해 속도는 빠르지만 대칭키가 제 3자에게 유출될 경우 무용지물이 될 수 있음

공개키

  • 두 개의 키를 사용하여 {A: 암호화, B: 복호화} 또는 {A: 복호화, B: 암호화}하는 방식
  • 타인에게 공개키를 제공하고 타인은 해당 공개키를 사용하여 정보를 암호화하는데 공개키가 유출되더라도 비공개키를 보유하고 있지 않으면 복호화를 할 수 없기 때문에 보안에서 우수함
  • 일반적으로 비공개키는 호스트가 가지고 있으며 사용자에게 공개키를 제공
  • 전자서명을 사용할 때, 호스트가 비공개키를 사용해 암호화를 하고 비공개키와 공개키를 함께 사용자에게 전달하는데 데이터 제공자의 신원을 보장하는데 사용

CA (Certificate Authority)

  • 신뢰성이 공인된 기업들이 SSL 서비스를 제공하는데 이를 통해 인증서를 구입해야 사용가능
  • 인증서에는 서비스의 정보, 서버 측 공개키가 포함되어 있는데 CA는 비공개 키를 이용해 암호화를 함
  • 브라우저는 CA 리스트를 보유하고 있는데 해당 리스트에 포함된 CA가 공인된 CA

동작과정

  • 공개키와 대칭키를 혼합해서 사용 (공개키는 대칭키에 비해 상대적으로 느림)
  • 실제 정보 대칭키 방식 암호화
  • 암호화된 실제 정보를 복호화할 때 사용할 대칭키를 공개키로 암호화하여 통신
(1) Client Hello : 서버에 접속한 클라이언트가 다음 3가지를 전송
    i. 클라이언트에서 생성한 랜덤 데이터
    ii. 해당 클라이언트의 암호화 방식
    iii. 세션 아이디
(2) Server Hello : Client Hello에 대한 응답으로 다음 3가지를 교환
    i. 서버에서 생성한 랜덤 데이터
    ii. 클라이언트에서 전달한 암호화 방식 중에서 서버가 사용가능한 방식을 선택
    iii. 인증서
(3) 클라이언트는 내장된 CA 리스트에 인증서를 발급한 CA를 확인하고 없다면 경고 출력 (확인방법: 내     장된 CA의 공개키 이용)
(4) 클라이언트는 서버와 클라이언트의 랜덤 데이터를 조합해 pre master secret 키 생성, 해당 키     는 데이터를 주고 받을 때 암호화하기 위해 사용 (대칭키이기 때문에 노출되면 안됨)
(5) pre master secret 값을 서버의 공개키로 암호화하여 서버에 전송하고 서버는 자신의 비공개키를   이용해 복호화 작업 수행
(6) pre master secret -> master secret -> seesion key 과정으로 생성하는데 클라이언트    와 서버는 세션키를 대칭키 방식으로 암호화하여 정보 교환
(7) 데이터 전송이 끝나면 세션키를 폐기

생활코딩 https://opentutorials.org/course/228/4894 참조했습니다.

profile
Back-end, Python, Data

0개의 댓글