[CS공부] 네트워크 구조(5)-SSL, TLS, HTTPS 통신(application Layer)

Min Kim·2023년 2월 20일
0

CS 공부

목록 보기
6/15

들어가기 전에


SSL, TLS 프로토콜을 활용한 HTTPS 통신의 개념을 알아봅시다.

1. HTTPS


  • HTTP 프로토콜에 Secure을 붙인 보안된 프로토콜
  • 포트 번호는 443번 (HTTP는 일반적으로 80번)
  • 전송 데이터를 암호화
  • 특정 프로토콜이 없고, SSL/TLS 프로토콜이 만들어주는 연결 방법 사용
  • 보안이 중요한 경우 사용(ex. 인터넷 뱅킹, 개인정보 등록, 카드 관련 서비스)

😜 추가 지식

  • 장점
    • 통신하고자 하는 서버가 신뢰할 수 있는 서버인지 판별할 수 있음.
    • 통신 과정에서 데이터가 노출될 가능성이 적음.

2. SSL(Secure Sockets Layer) / TLS(Transport Layer Security)


  • HTTPS는 암호화를 위해 SSL/TLS 프로토콜을 사용
  • 응용계층과 전송 계층 사이에 위치
  • TLS 1.0은 SSL 3.0을 계승

😜 추가 지식

  • SSL과 TLS 관계
    • 네스케이프에 의해서 SSL이 먼저 발명되고, 점차 폭넓게 사용되다가 표준화 기구인 IETF의 관리로 변경되면서 TLS라는 이름으로 바뀜.
    • 다른 것처럼 분리해서 말하는데 같은 것이고 구버전 신버전 느낌!

1) SSL 디지털 인증서

  • SSL 프로토콜에 사용되는 인증서

  • 역할

    • 클라이언트가 접속하려는 서버가 신뢰 할 수 있는 서버인지를 판단 가능
    • 통신 내용이 공격자에게 노출되는 것을 방지
    • 통신 내용의 악의적인 변경을 방지
  • 내용

    • 서비스 정보(CA 정보, 도메인 등)
    • 서버 측 공개키
  • CA(Certificate Authority)

    • 위 인증서를 발급해주는 인증 기관
    • CA가 제공하는 인증서를 사용하면 자물쇠 표시
    • 브라우저는 신뢰할 수 있는 CA(공인 CA)들과 해당 CA의 공개키를 알고 있음

😜 추가 지식

  • 예시로 보는 암호화, 복호화, 키 개념
    • Love라는 것을 다음 알파벳인 MPZF로 보냄 (암호화)
    • 받은 사람이 규칙을 알고 Love로 치환함 (복호화)
    • 보내는 사람이 다음 알파벳으로 치환해서 보낸다는 정보 ()

3. SSL 동작원리 - 암호화 방식


대칭키 방식

  • 동일한 키로 암호화와 복호화를 같이 할 수 있는 방식 (대칭키)
  • 암호 통신을 하기 위해선 대칭키를 주고 받아야 하기 때문에 키가 유출될 가능성이 있음

공개키 방식

  • 두 개의 키, 공개키(public key), 비밀키(private key)로 암호화 및 복호화하는 방식 (공개키)
  • 공개키로 암호화 후 전송 -> 비밀키로 복호화 (공개키로는 암호화는 할 수 있지만 복호화는 할 수 없음.)
  • 비밀키로 암호화 후 공개키와 같이 전송 -> 공개키로 복호화 (데이터의 복호화 위험에도 이렇게 보내는 이유는?)
    • 목적이 다른 것! 사용자가 비밀키로 암호화 했다는 증거이므로 데이터 제공자의 신원을 보장하는 개념
    • 이러한 것을 전자 서명

😜 추가 지식

  • 같은 말
    • 비밀키 = 개인키, 비공개키

SSL은 대칭키, 공개키를 함께 사용

  • 공개키 방식은 보안이 뛰어나지만 암호화/복호화에 컴퓨팅파워가 많이 사용
  • 따라서 데이터 전달에는 대칭키를 쓰고, 그 대칭키를 교환할 때는 공개키 사용

4. SSL 동작원리 - SSL Handshaking


1. Client -> Server

  • Client hello라 불리며 다음과 같은 데이터를 서버에 전송

    • 클라이언트가 생성한 랜덤 데이터
    • 클라이언트가 지원하는 암호화 방식
    • Session Id (이미 SSL handshake를 한번 완료했다면 기존 session 재활용, 처음에는 전송 X)

2. Server -> Client

  • Server hello라 불리며 다음과 같은 데이터를 클라이언트에 전송

    • 서버가 생성한 랜덤 데이터
    • 서버가 선택한 암호화 방식
    • CA의 비밀키로 암호화 된 SSL 인증서

3. Client -> Server

  • 클라이언트는 먼저 인증서를 발행한 CA를 신뢰할 수 있는지 판단 (갖고 있는 CA 리스트와 비교)

  • 진짜 그 CA가 발행한 인증서가 맞는지 확인

    • 기존에 갖고 있는 CA의 공개키를 사용해 인증서를 복호화
    • 복호화에 성공한다면, 신뢰 할 수 있는 CA가 보증한 서버임을 확신할 수 있음
    • 공개키 방식을 거꾸로 사용해 Authentication에 활용했다고 할 수 있음 (전자 서명과 같음)
  • 이후 Client hello 의 랜덤 데이터와 Server hello 의 랜덤 데이터를 조합하여 pre master secret key 생성

  • pre master key암호화(인증서에 포함된 서버측 공개키 사용)하여 서버에 전송

    • 이 때 사용할 암호화 기법은 대칭키이기 때문에 pre master secret 값은 제 3자에게 절대로 노출되어서는 안됨
    • 서버의 공개키로 pre master secret 값을 암호화해서 서버로 전송하면 서버는 자신의 비공개키로 안전하게 복호화 할 수 있음

4. Pre master key를 session key로 변환

  • 서버는 자신의 비밀키로 전달받은 pre master key복호화
  • 클라이언트와 서버 모두 일련의 과정을 거쳐 세션 키를 획득
    ( pre master key -> master key -> session key )
  • 이후 세션 키를 대칭키로 사용해 데이터를 암호화하여 클라이언트-서버 통신이 이루어짐

5. Handshake 종료

😜 추가 지식

  • 이후 세션 단계로 통신할 땐 세션 키를 이용해서 대칭키 방식으로 암호화
  • 암호화된 정보는 상대방에게 전송될 것이고, 상대방도 세션키 값을 알고 있기 때문에 암호를 복호화 할 수 있음

참고


해당 사이트의 내용을 참고로 작성했습니다. 추후에 더 알게 되는 내용들을 추가하겠습니다.

SSL, TLS, HTTPS는 무엇인가요?
장구리
HTTPS와 SSL/TLS 정리
SSL/TLS 와 HTTPS
4D v18.4 Using TLS Protocol (HTTPS)
생활코딩

profile
Better & Better 꾸준히 성장하는 개발자

0개의 댓글