HTTPS & SSL

최다슬·2022년 2월 28일
0

📝Study

목록 보기
11/11

HTTPS(Hypertext Transfer Protocol Secure)

HTTPS란?

서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜인 HTTP + Secure(보안기능)
서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는 보안문제를 SSL(보안 소켓 계층)을 사용함으로써 해결


SSL(Secure Sockets Layer)

SSL이란?

보안 소켓 계층으로 웹사이트와 브라우저(혹은, 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결을 보안을 유지하는 표준 기술

TLS(Transport Layer Security)

전송 계층 보안으로 더 강력한 버전의 SSL이지만, SSL이 더 일반적으로 사용되는 용어이기에, 여전히 보안 인증서는 SSL이라 불리고있음.

SSL이 필요한 이유

  • 웹사이트에서 전송이 이루어지는 모든 유형의 정보 보안을 유지해줌으로 전달되는 내용이 다른 사람에게 노출되는것을 막을 수 있음
    - 결제페이지
    - 로그인
    - 블로그 및 정보사이트
  • 클라이언트가 접속하려는 서버가 신뢰 할 수있는 서버인지 알 수 있음
  • 전달되는 내용이 악의적으로 변경되는것을 막을 수 있음

SSL 암호화 종류

⭐️ SSL은 공개키와 대칭키의 장점을 혼합한 방법을 사용
암호화를 할 때 사용하는 비밀번호 = 키(key)

  • 대칭키 방식 : 동일한 키로 암호화와 복호화를 할 수 있는 기법
    즉, 123를 사용하여 암호화하였다면 복호화도 123를 입력해야 가능
    - 암호를 주고 받는 사람들 사이에 대칭키를 전달하는 것이 어렵다는 단점
    - 대칭키가 유출되면 키를 획득한 공격자가 암회의 내용 복호화 가능

  • 공개키 방식 : 대칭키의 단점을 보완하기 위해 나온 방식으로 A키를 암호화를 하면 B키로 복호화할 수 있고, B키로 암호화하면 A키로 복호화할 수 있는 방식
    - 두개의 키 중 하나를 비공개키, 하나를 공개키로 지정
    • 비공개키 : 자신만이 가지고있는 키
    • 공개키 : 타인에게 제공하는 키

공개키 동작 원리

  • 공캐키를 제공받은 타인은 공개키를 이용해서 정보를 암호화
  • 암호화한 정보를 비공개키를 가지고있는 사람에게 전송
  • 비공개키의 소유자는 비공개 키를 사용해서 암호화된 정보를 복호화
    ❗️ 공개키가 유출된다고해도 비공개키를 모르면 정보를 복호화 할 수 없음!

SSL 통신 과정

통신을 위해선 핸드쉐이크 -> 세션 -> 세션 종료의 과정을 거침

  • SSL 핸드쉐이크 수행 : 데이터를 주고 받기 위해 어떤 방법을 사용해야 하는지 서로의 상태를 파악
  • 세션 : 서로간의 협상이 완료되면 SSL 세션이 생성되고 클라이언트와 서버는 원하는 데터를 주고받게됨
  • 세션 종료 : 데이터 전송의 끝을 서로에게 알리며 세션을 종료

Handshake 단계 원리

  1. Client Hello 단계 : 클라이언트가 서버에 접속(브라우저 검색창에서 도메인을 입력하는것).
  • 클라이언트가 랜덤한 데이터와 자신의 브라우저에서 지원할 수 있는 암호화 방식을 서버에게 먼저 제시
  1. Sever Hello 단계 : 서버가 클라이언트에게 응답.
  • 서버가 생성한 랜덤 데이터와 클라이언트가 제시한 암호화 방식 중에서 선정한 암호화 방식 + 서버 자신의 인증서(공개키와 함께)를 전달
  1. 인증서 확인
  • 클라이언트는 서버에게 받은 인증서가 CA에 의해 발급된 것인지를 확인하기 위해 클라이언트에 내장된 CA 공개키를 이용해서 인증서를 복호화(개인키로 암호화 -> 공개키로 복호화)
    만약, 복호화에 성공하였다면 CA의 개인키로 암호화된 문서임이 보증되는것 = 서버를 신뢰 할 수 있게됨
    - CA(Certificate Authority) : 서버의 SSL 인증서가 진짜인지 가짜인지 검증하는 인증기관
  • 또한, 서버에게 받은 랜덤 데이터 + 클라이언트가 생성한 랜덤 데이터를 통해 pre master secret 키 생성(데이터를 주고 받을 때 암호화하기 위해 사용될 것)
    - 사용할 암호화 기법 : 대칭키 => pre master secret 키가 다른 사람들에게 노출되어선 안되는것!
    ∴ 서버에게 전달할때는 공개키 방식으로 전달. 서버의 공개키로 pre master secret 를 암호화해서 서버로 전송하면 서버는 자신의 비공개키로 복호화 하는것(서버의 공개키는 서버로부터 받은 인증서 안에 존재)
  1. pre master secret키 서버로 전송
  • 서버에게 받은 SSL 인증서 안에 들어있는 공개키를 이용하여 pre master secret 키를 암호화하여 서버로 전송
  • 클라이언트와 서버가 pre master secret 키를 공유하게 되는것
  1. pre mster secret 복호화
  • 서버는 자신의 비공개키로 복호화 진행
  1. mater secret 및 session key 생성
  • 서버와 클라이언트는 일련의 과정을 거쳐 pre master secret 값을 master secret 값으로 만듦
    (master secret 키를 이용하여 Session Key 가 만들어지는데 session key 값을 이용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호환 한 후에 주고 받음 = session key 를 모두 공유하는것)

Session 단계 원리

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

  • 정보를 상대방에게 전송하기 전에 session key 값을 이용해서 대칭키 방식으로 암호화 진행
    ( 암호화 된 정보가 상대방에게 전송. 상대방도 session key값을 알고 있기 때만에 복호화 가능)
  • 왜 대칭키와 공개키를 같이 사용하는가?
    : 공개키만 사용한다면 큰 비용문제와 보안 위험으로 인해서
    ∴ 데이터를 안정하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화 하고
    실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터를 주고 받는 것

End Session 단계 원리

: 데이터의 전송이 끝나면 SSL 통신이 끝남을 서로에게 알려줌

  • 통신에서 사용한 대칭키인 session key 는 폐기

SSL 인증서

: 라이언트와 서버간의 통신을 제3자가 보증해주는 문서
클라이언트가 서버에 접속하면
서버는 클라이언트에게 인증서 정보를 전달
클라이언트는 인증서 정보가 신뢰할 수 있는것인지 검증
검증이 완료된 후 데이터를 보내는 등 이후 절차를 진행하게됨

SSL 인증서의 역할

  • 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장
  • SSL 통신에 사용할 공개키를 클라이언트에게 제공


References
https://www.digicert.com/kr/what-is-ssl-tls-https/
https://goodgid.github.io/TLS-SSL/
https://12bme.tistory.com/80
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skinfosec2000&logNo=222135874222
https://www.crocus.co.kr/1387

0개의 댓글