[http] TLS/SSL handshake

seheo·2022년 8월 9일
0

Network

목록 보기
2/3

틀린 부분이 있으면 댓글로 알려주시면 감사하겠습니다!!

HTTPS (Hypertext Transfer Protocol Secure)

Secure라는 말을 통해서 알 수 있듯이 보안이 강화된 HTTP
HTTP는 암호화되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 메시지를 감청하는 것이 매우 쉽다.
예를들어 로그인을 위해서 서버로 비밀번호를 전송하거나, 또는 중요한 기밀 문서를 열람하는 과정에서 악의적인 감청이나 데이터의 변조등이 일어날 수 있다는 것이다. 이를 보안한 것이 HTTPS다.

HTTP vs HTTPS TCP/IP 스택

HTTPS에서 암호화 하기 위하여 SSL, TLS을 사용한다.
이 커넥션은 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해준다.
ex) 금융 활동, 온라인 쇼핑

SSL(Secure Socket Layer)

SSL은 보안 프로토콜이다.
프로토콜은 알고리즘이 사용되어야 하는 방식을 설명한다.
이 경우 SSL 프로토콜은 링크와 전송되는 데이터의 암호화 변수를 결정합니다.

TSL(Transport Layer Security)

SSL과 같은 말로 SSL의 변경된 이름이다. (정식명칭)
TLS 1.0dms SSL 3.0을 계승
여전히 TLS보다 SSL이라는 이름으로 많이 불린다.

SSL 디지털 인증서

SSL 인증서는 클라이언트와 서버간의 통신을 제 3자가 보증해주는 전자 문서

SSL 인증서의 장점

1. 통신내용이 공격자에게 노출되는 것을 막을 수 있다.

대칭키와 비대칭키/공개키(출처:bolee님)등을 이용한 암호화를 통해 원하는 사람끼리만 정보를 주고 받을 수 있다.
key가 없는 사람은 정보를 가져가도 복호화를 할 수 없기 때문에 정보를 얻지 못함

2. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장

CA(Certificate authority)를 통해 신뢰 할 수 있는 서버인지 보장

CA(Certificate authority)

암호학에서 CA는 다른 곳에서 사용하기 위한 디지털 인증서를 발급하는 하나의 단위이다.
엄격하게 공인된 기업들이 서버가 클라이언트의 의도에 맞는지 보장하는 기업들
ex) Comodo Security Solutions, Symantec

3. 통신 내용의 악의적인 변경을 방지

SSL 인증서의 내용

  1. 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등등)
    • 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지에 대한 내용을 담고 있다.
  2. 서버 측 공개키 (공개키의 내용, 공개키의 암호화 방법)
    • 서버와 통신 할때 사용할 공개키와 그 공개키의 암호화 방법에대 대해 담고있다.

SSL 동작방식

SSL 암호화 통신의 3단계

SSL은 공개키와 대칭키를 혼합하여 사용한다.
클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화
대칭키 방식으로 암호화된 실제 정보를 복호화하여 사용할때 사용해는 대칭키를 공개키로 암호화 하여 클라이언트와 서버가 주고 받는다.

  • 실제 데이터: 대칭키
  • 대칭키의 키: 공개키

필자 생각
대칭키를 암호화 한 키를 공개키로 암호화하여 이중포장느낌으로 서버에 전송

1. 악수 (handshake)

handshake

핸드셰이킹(handshaking), 주고받기는 정보기술과 전기통신 및 관련 분야에서 채널에 대한 정상적인 통신이 시작되기 전에 두 개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정
사람과 사람이 소통하는 것처럼 클라이언트와 서버도 실제 데이터를 주고 받기 전에 악수를 한다.
이 악수를 통해 서로 상대방이 존재하는지, 또 상대방 데이터를 주고 받기 위해서 어떤 방법을 사용해야하는지를 파악한다.
채널의 물리적인 확립이 잇따르며, 정상적인 정보 전송 이전에 이루어진다.

SSL 방식은 이용해서 통신하는 브라우저와 서버는 핸드쉐이크를 하는데, 이 때 SSL 인증서를 주고 받는다.
SSL은 공개키와 대칭키 방식을 혼합하여 동일한 키를 공유하지 않으면서 최대한 효율적인 컴퓨터 자원으로 암호화를 수행한다.

출처: TLS/SSL Handshake란

1. Clinet Hello

  • 클라이언트 측에서 생성한 랜덤 데이터
  • 클라이언트가 지원하는 암호화 방식들
    어떤 암호방식을 서로 사용할지 서버와 협의 해야되기 때문에
  • 세션아이디

2. Server Hello

  • 서버측 생성 랜덤 데이터
  • 서버가 지원하는 암호화 방식
    클라이언트가 전달하는 암호화 방식 중에서 서버 쪽에서도 사용가능한 암호화 방식을 선택해서 전달
  • 인증서

3. 서버 인증서 확인

인증서를 받으면 사이트가 신뢰할 수 있는 사이트인지 확인

4. pre master secret 생성

  • 서버의 랜덤 데이터, 클라이언트 랜덤 데이터(조합) -> pre master key 생성
  • 대칭키로 암호화함 (제 3자에게 절대 노출 x)

7. pre master key 서버에게 전달

  • pre master key를 서버의 공개키로 암호화하여 서버로 전송
  • 서버의 공개키는 서버한테 받은 인증서에 있다.

8. 서버 pre master key 복호화

  • 서버의 비공개키를 통해 pre master key를 복호화
  • 서버 클라이언트 모두가 pre master key 공유
  • pre master key 값을 master key 값으로 만든다.
  • master key를 통해 session key를 생성

9. 메시지 교환

session key 값을 이용하여 서버 클라이언트는 데이터를 대칭킹 방식으로 암호화 한 후에 주고 받는다.

2. 세션

세션은 실제로 서버와 클라이언트가 데이터를 주고 받는 단계
서로 세션키 값을 알고 있기 때문에 복호화 가능

3. 세션종료

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

참고자료

생활코딩 http
웹사이트 보안을 위한 방법, SSL이란? - Sk 인포섹

0개의 댓글