HTTPS&SSL (2)

Jiwon·2021년 12월 20일
0

HTTPS&SSL

목록 보기
1/7

사용자를 클라이언트, 웹서비스를 서버라고 하자.
클라이언트와 서버가 네트워크를 이용해서 통신을 할 때
내부적으로 3가지 단계가 일어난다.

이 과정을 통해 SSL이 어떻게 데이터를 암호화해서 전달하냐면
1. 악수 (Handshake)
2. 세션(데이터 송수신)
3. 세션종료

  • 악수(Handshake)
    인터넷 세상에서는 클라이언트와 서버 둘 다 서로를 믿지 않고 있는데
    서로를 믿기 위한 밑작업이 악수이다.
    어떤 방법으로 데이터를 주고 받을 것인지,
    상대방이 누군지에 대한 인식을 하기 위해 악수라는 과정을 거친다.
    Handshake 과정을 통해 SSL 인증서를 주고 받으면서 서로를 신뢰할 수 있게 된다.
    그 단계는 크게 아래 단계로 이루어진다.
    1. Client Hello / 클라이언트가 서버에 접속한다.
    2. Server Hello / Client Hello에 대한 응답으로 Server Hello를 한다.
    3. Client의 인증서 확인 및 대칭 키를 공개키로 암호화해서 전달
      / 클라이언트는 서버로 부터 받은 인증서가 CA에 의해서 발급된 것인지를 확인하기 위해서 클라이언트에 내장된 CA 리스트를 확인한다.
    4. Server가 비공개키로 복호화해서 대칭 키를 전달 받음

비대칭키로 암호한다면 데이터를 안전하게 전달할 수 있지만
매 통신 시마다 한다면 너무 많은 자원과 시간을 사용해야 한다.
따라서, 비대칭키보다 더 적은 컴퓨터 자원을 이용하는 대칭키 방식을 이용해야 한다.

대칭키를 이용해서 속도는 빠르게 하되, 대칭키를 안전하게 전달해야 한다.
-> 대칭키를 비대칭키 기법을 이용해서 전달하면 가능
즉, 클라이언트가 공개키를 이용해서 대칭키를 암호화 시킨다.
그러면 특정 암호문이 나오는데 이 암호문을 서버에 전달한다.

  • 서버
    이 암호문을 비공개키를 이용해서 해당 암호문을 복호화하면
    대칭키를 전달 받을 수 있다.
    물론 비공개키가 없는 다른 사람들은 암호문을 복호화 할 수 없으니
    대칭키를 안전하게 전달할 수 있다.
    -> 이처럼 SSL은 공개키와 대칭키의 장점을 혼합한 방법을 사용해 문제를 해결할 수 있다.

그렇다면 대칭키는 어떻게 만드나.
클라이언트와 서버가 생성해서 전달한 랜덤 데이터를 혼합해서 하나의 데이터로 만든다. (Pre master secret키 라고도 한다.)
이 값을 대칭키로 사용한다.
이 대칭키를 서버의 공개키를 이용해서 암호화 한 다음 서버에게 전송한다.
이로써 Client의 인증서 확인 및 비밀 키 전달 과정이 끝난다.

이제 서버는 클라이언트가 전송한 암호문을 이제 비공개키로 복호화 한다.
그러면 대칭키를 얻게 된다.
그러면 이 대칭키를 가진 것은 클라이언트와 서버 뿐이므로, 서로를 신뢰하게 된다.

앞으로 이 값을 이용해서 서버와 클라이언트는 대칭키 방식으로 암호화 한 뒤 서로 주고 받을 수 있다.

클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알린다.
-> 이제 데이터를 주고 받을 준비가 되었음을 서로에게 알리는 것.

  • 세션(데이터 송수신)
    서버와 클라이언트가 데이터를 주고 받는 단계
    인사(Handshake)를 하면서 서로 대칭키를 가지게 되었는데
    이 대칭 키를 해당 세션에서 사용할 예정이므로 세션 키.라고 한다.

따라서 앞으로 정보를 상대방에게 전송하기 전에 세션 키로 암호화한다.
그리고 정보를 받은 사람도 세션 키를 가지고 있으므로 복호화 할 수 있다.
이로써 SSL은 보안적으로 전송할 수 있게 된다.

데이터의 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려주게 된다.
그리고 통신에서 사용한 대칭키인 세션키를 폐기하게 된다.

profile
과연 나는 ?

0개의 댓글