1. SSL

  • HTTP는 기본적으로 플레인 텍스트로 전송하기에 보안에 취약

  • TLS(Transport Layer Security), 혹은 SSL(Secure Socket Layer) 이라 불리는 프로토콜을 사용하여
    전송계층간의 통신시에 데이터를 암호화하는 것으로 데이터 유출을 방지한다.

  • TCP의 3-way handshaking 절차 이후에 SSL handshaking 과정을 거쳐 암호화 통신이 가능한 상태가 된다.

  • SSL handshaking
    • Client Hello
      • 클라이언트는 서버에 사용 가능한 암호화 방식들과 랜덤 데이터를 전송

    • Server Hello
      • 서버는 클라이언트가 보낸 암호화 방식중 하나를 선택
      • 선택한 암호화 방식을 자신이 생성한 랜덤 데이터와 함께 클라이언트에게 전송

    • Certificate
      • 서버는 CA(인증기관)에서 발급받은 SSL 인증서를 클라이언트에게 전송
      • 이때, 인증서 내에 자신이 발급한 공개키를 첨부(개인키는 자신이 보관)

    • Server Key Exchange
      • Certificate 과정에서 클라이언트에게 보낸 인증서에 서버의 공개키가 포함되지 않았다면 직접 클라이언트에게 공개키를 전송

    • Server Hello Done
      • 서버가 행동을 마쳤음을 클라이언트에게 알림

    • Client Key Exchange
      • 클라이언트는 CA의 공개키를 사용하여 서버가 보낸 인증서를 검증
      • 인증서가 검증되면 실제로 데이터를 암호화하기 위한 대칭키를 생성
      • 대칭키를 서버가 보낸 공개키로 암호화하여 서버에게 전송
      • 전송된 대칭키는 중간에 가로채더라도 서버의 공개키로 암호화되어있어 서버의 개인키 없이는 복호화가 불가능하므로 서버와 클라이언트는 안전하게 암호화키를 공유하게 됨

    • Change Cipher Spec / Finished
      • 클라이언트와 서버가 암호화 통신을 위한 준비가 완료되었음을 알리기 위해 서로 번갈아가며 패킷을 전송.

 

 

2. HTTPS

  • 기존의 HTTP에 SSL 프로토콜을 추가하여 보안성을 추가한 확장 프로토콜
  • 443번 포트를 사용

'CS > 네트워크' 카테고리의 다른 글

#10 네트워크 보안 1 - 암호화  (0) 2021.12.06
#9 Wireless Network & Mobile Network  (0) 2021.11.30
#8 Link Layer(Data Link Layer + Physical Layer)  (0) 2021.11.25
#7 Network Layer  (0) 2021.11.18
#6 Transport Layer  (0) 2021.11.16

+ Recent posts