ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Network - HTTPS & SSL
    Computer Science/Network 2022. 1. 1. 17:51

    HTTP

    HTTP란?

    ㆍ 인터넷 상에서 정보를 주고받기 위한 프로토콜이다.

    ㆍ 클라이언트와 서버 사이에서 이루어지는 요청과 응답에 대한 프로토콜이다.

    ㆍ 암호화되지 않은 방법으로 데이터를 전송한다는 특징이 있다. 따라서, 악의적인 감청과 데이터가 변조될 가능성이 존재한다.


    HTTPS

    HTTPS란?

     

    ㆍ 보안이 강화된 HTTP이다.

    ㆍ 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다.

    ㆍ HTTPS는 HTTP의 하부에 SSL과 같은 보안 계층을 제공함으로써 동작한다.

     

    HTTPS의 사용 이유

    1. 내가 특정 웹 사이트에 보내는 정보를 다른 누군가가 훔쳐보지 못하게 하기 위해서이다.

    2. 내가 접속한 웹 사이트가 신뢰할 수 있는 사이트인지 판별하기 위해서이다. (기관으로부터 검증된 사이트만 https를 허용)


    SSL

    SSL이란?

    ㆍ SSL 인증서를 통해 서버의 신원을 확인하고, 데이터를 암호화하여 통신하는 보안 방식이다.

    ㆍ 넷스케이프에서 SSL을 만들었고, 나중에 표준화기구(IETF)로 이관하면서 TLS로 이름이 변경되었다.

    SSL은 CA(Certificate Authority)라고 불리는 서드 파티로부터 서버와 클라이언트의 인증을 수행하는 데 사용된다. 


    SSL 디지털 인증서

    SSL 디지털 인증서란?

    ㆍ SSL 방식에 사용되는 전자화된 문서로, 공인된 인증기관(CA)에서 발급한다.

    ㆍ 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서 정보를 전달한다. 

    ㆍ 클라이언트는 이 인증서 정보가 신뢰할 수 있는 것인지 검증한 후에 다음 절차를 수행하게 된다.

     

    SSL 인증서의 장점

    ㆍ 통신 내용이 노출, 변경되는 것을 방지한다.

    ㆍ 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지 확인 가능하다.

     

    SSL 인증서의 내용

    1. 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등)

    2. 서버 측 공개 키 (공개키의 내용, 공개키의 암호화 방법)

     

    SSL에서 사용하는 암호화의 종류

    SSL의 핵심은 암호화이다. SSL은 보안과 성능상의 이유로 두 가지 암호화 기법을 혼용해서 사용하고 있다.

     

    1. 대칭키 암호화 방식

    ㆍ 동일한 키로 암호화와 복호화를 같이 할 수 있는 방식의 암호화 기법을 말한다.

    ㆍ 발송자와 수신자가 서로 대화하기 위해서는 둘 다 공유키를 가져야 한다. 따라서, 대칭키를 전달하는 과정에서 키가 유출되면 암호의 내용을 복호화할 수 있기 때문에 위험하다.

    ㆍ 이를 보완하기 위해서 나온 방식이 공개키 암호화 방식이다.

     

    2. 공개키 암호화 방식

    ㆍ 암호화와 복호화를 하는데 다른 키를 사용하는 암호화 기법을 말한다.

    ㆍ A의 키로 암호화를 하면 B의 키로 복호화를 할 수 있고, B의 키로 암호화를 하면 A의 키로 복호화를 할 수 있는 방식이다.

    ㆍ 2개의 키는 개인키(Private Key)와 공개키(Public Key)로 지정한다. 보통 공개키는 디지털 인증서 안에 포함되어 있다.

    ㆍ 개인키는 자신만이 가지고 있고, 공개키는 타인에게 제공한다.

    ㆍ 공개키 제공받은 타인은 공개키를 이용해서 정보를 암호화한다. 암호화한 정보를 개인키를 가지고 있는 사람에게 전송한다.

    ㆍ 개인키의 소유자는 개인키를 이용해서 암호화된 정보를 복호화한다. 이 과정에서 공개키가 유출된다고 해도 개인키를 모르면 정보를 복호화할 수 없기 때문에 안전하다.


    HTTPS / SSL의 기본 원리

    ㆍ 대칭키 방식과 공개키 방식을 혼용하여 서버의 신원을 보증하고, 데이터 통신을 암호화한다.

     

    1. 서버에서 개인키 / 공개키를 생성한다.

    2. 공인기관(CA)에서 서버의 SSL 인증서를 발급받는다.

         SSL 인증서는 CA의 개인키로 암호화되어있다.

         인증서 내부에는 서버의 공개키가 저장되어 있다.

    3. 서버에 인증서를 저장한다.

    4. 브라우저가 서버에 접속하면 인증서를 전송한다.

    5. 브라우저는 받은 인증서를 CA의 공개키로 복호화한다.

         인증서는 CA의 개인키로 암호화되어있다.

         브라우저(크롬, 사파리 등)는 공인된 CA들의 공개키를 내부에 보관하고 있다.

    6. 인증서 복호화에 성공한다면, 해당 인증서가 CA에 의해 발급된 것임이 증명된다.

         인증서를 보낸 서버도 CA가 인증한 서버임이 증명된다.

    7. 복호화한 인증서에서 서버의 공개키를 취득하여 데이터 통신에 활용한다.

         서버와 주고받는 데이터 자체는 대칭키 방식으로 암호화한다.

         대칭키 방식에 사용된 키를 서버의 공개키로 암호화한다.


    HTTPS / SSL 상세 과정

    SSL 인증서 생성

    1. 서버에서 비밀키 / 공개키 생성

    2. 서버의 공개키를 CA에게 전달하면서 SSL 인증서 발급 요청

    3. CA는 CA의 개인키로 암호화된 인증서를 서버에게 발급

     

    Handshake(악수)

    ㆍ 클라이언트와 서버가 통신을 하기 위해 서로를 파악하는 과정이다.

     

    1. 클라이언트가 서버에 접속 (Client Hello라고 함)

         클라이언트에서 생성한 랜던 데이터를 서버 측으로 전송

         클라이언트가 지원하는 암호화 방식들을 서버 측으로 전송

         Session ID를 서버 측으로 전송

    2. 서버가 클라이언트에게 응답 (Server Hello라고 함)

         서버에서 생성한 랜던 데이터를 클라이언트 측으로 전송

         서버가 선택한 암호화 방식을 클라이언트 측으로 전송

         SSL 인증서를 클라이언트 측으로 전송

    3. 클라이언트의 확인 작업

         서버로부터 받은 SSL 인증서를 확인(브라우저에 내장된 CA 리스트에 있는 CA의 인증서인지 확인)

         인증서 복호화 (브라우저에 내장된 해당 CA의 공개키를 통해 복호화)

         복호화 성공 시 인증서가 CA에 의해 발급된 것이 증명됨

         인증서를 전송한 서버도 CA가 보증하는 서버임이 증명됨

         복호화된 인증서로부터 서버 공개키 획득

    4. 클라이언트의 pre-master secret key 생성

         클라이언트가 생성한 랜던 데이터 + 서버에게 받은 랜덤 데이터의 조합으로 특정값 생성

         인증서에 있는 서버의 공개키를 통해 pre-master secret key를 암호화

         암호화된 pre-master secret key를 서버 측으로 전송

    5. 서버의 session key(대칭키의 key) 생성

         암호화된 pre-master secret key를 받아서 서버의 개인키로 복호화

         복호화된 pre-master secret key를 이용해 master secret을 생성

         이렇게 만든 aster secret으로 session key를 생성

    6. Handshake 종료

         서버의 신원이 확인

         데이터 통신에 사용할 대칭키 암호화의 키(session key)가 클라이언트, 서버 양쪽이 공유

     

    세션(전송)

    ㆍ 실제로 서버와 클라이언트가 데이터를 주고받는 단계

     

    1. 클라이언트의 데이터를 암호화하고 서버로 전송

         session key를 통해 대칭키 방식으로 데이터를 암호화하여 서버에게 전송

    2. 서버의 데이터 복호화

         session key를 통해 대칭키 방식으로 전달받은 데이터를 복호화

         session key를 통해 대칭키 방식으로 응답 데이터를 암호화하여 클라이언트에게 전송

    3. 클라이언트의 데이터 복호화

         session key를 통해 대칭키 방식으로 데이터를 복호화하여 처리

     

    세션 종료

    1. 데이터 전송 종료

    2. SSL 통신 종료

    3. session key 폐기

         매번 연결 시마다 새로운 session key를 생성하여 아주 짧은 시간만 사용

         혹시 탈취되더라고 비교적 안전


    출처

    https://opentutorials.org/course/228/4894

    https://curryyou.tistory.com/207

    https://wayhome25.github.io/cs/2018/03/11/ssl-https/

     

    728x90

    'Computer Science > Network' 카테고리의 다른 글

    Network - HTTP  (0) 2021.12.13
    Network - OSI 7 계층  (0) 2021.10.19

    댓글

Designed by Tistory.