본문 바로가기

23년 2학기 학교공부/컴퓨터네트워크

[CN] TLS(Transport-layer security)

목차

    728x90
    반응형
    SMALL
    2023학년도 2학기 충남대학교 이영석 교수님의 컴퓨터네트워크 수업 정리자료입니다.

     

     

     

    📁 TLS

     

    TLS란 

     

     

    TLS의 표준은 SSL(Secure Socket Layer) 3.0 버전, IETF TLS 1.0 버전,

    TLS 1.2 => TLS 1.3 (RFC 8846)

     

     

    TLS의 기능

     

    TLS의 핵심기능은 암호화, 인증, 무결성 3가지가 있다.

     

    TLS는 API를 제공하고, TLS 버전/암호집합을 결정하고, 서버 인증서 이용 신원 인증, 세션키 생성.

     

     

    1. confidentiality(기밀성)

    2. authentication(인증)

    3. message integrity(무결성)

    4. access and availability(가용성)

     

     

     

    TLS Handshake 프로토콜

    HTTPS로 통신하는 경우, TCP 소켓 통신 과정 전에 아래와 같은 TLS handshake 과정이 추가된다.

     

     

     

     

    1. 파란색화살표 (0~56ms 부분)

    기존의 TCP 3-way handshake 과정이다. TLS는 TCP 통신으로 전송되기 때문에 일단 TCP 소켓을 생성해야한 후 진행되어야한다.

     

     

     

    2. Client Hello (~84ms 부분)

    TCP 연결을 통해 클라이언트는 아래 정보를 ClientHello 메세지에 담아서 서버로 보낸다.

    - 브라우저가 사용하는 SSL/TLS 버전 정보

    - 브라우저가 지원하는 암호화 방식 모음(cipher suite)

    - 브라우저가 순간적으로 생성한 임의의 난수 등.

     

    🌱 cipher suite

    암호화 모음 이라는 뜻으로, 보안의 궁극적인 목표를 달성하기 위해 사용하는 방식을 패키지 형태로 묶어놓은 것을 의미한다.

     

    이때 보안의 궁극적인 목표란 안전한 키 교환, 전달대상 인증, 암호화 알고리즘, 메시지 무결성 확인 알고리즘 등을 말한다.

     

    형식: SSL/TLS_(키 교환 알고리즘)_(인증 알고리즘)_WITH_(대칭키 알고리즘)_(블록 암호 운용 방식)_(해시 알고리즘)
    예시) TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

     

     

     

    3. Server Hello, Certificate, Server Hello Done (~112ms 부분)

    TCP 연결을 통해 서버가 아래 정보를 ServerHello 메시지에 담아서 클라이언트로 보낸다.

     

    • 브라우저의 암호화 방식 정보 중에서, 서버가 지원하고 선택한 암호화 방식(cipher suite)
    • 서버가 순간적으로 생성한 임의의 난수
    • 서버의 SSL 버전

     

    Server Hello 메시지 전달 이후 클라이언트로 Certificate(인증서)를 전달한다.

    • Certificate : 서버의 공개키가 담긴 SSL 인증서.
      SSL 인증서를 발급한 CA의 비밀키로 암호화되어 발급되어, 이 인증서는 CA의 공개키를 이용해서만 복호화할 수 있다. 대칭키가 생성되기 전까지 클라이언트가 나머지 handshake 과정을 암호화하는데 쓸 공개키를 담고있다.(?)

     

    이후 Server Hello Done으로 Server Hello 절차가 끝났음을 알린다.

     

    🌱 CA

    SSL 인증서를 발급하는 기관으로, 신뢰할 수 있는 기관들을 의미한다. Root Certificate라고 부르기도 한다.

     

    CA는 자체적인 공개키와 비밀키를 가지고 있다.

     

     

     

    4. Client Key Exchange, Change Cipher Sepc, Finished (~140ms 부분)

    Client Key Exchange 과정을 수행한다. 클라이언트 측이 서버측의 SSL 인증서가 유효한지를 신뢰할 수 있는 CA 목록을 통해 확인한 후, CA를 통해 신뢰성이 확보되면 클라이언트가 premaster secret을 생성하고 서버의 공개키로 암호화하여 전송하는 과정이다.

     

    대부분의 브라우저에는 신뢰할 수 있는 CA들의 정보와 CA들이 만든 공개키가 이미 설치되어있다. 서버가 직전에 전송한 SSL 인증서가 정말 CA가 만든것인지 확인하기 위해 내장된 CA 공개키로 암호화된 인증서를 복호화한다. 정상적으로 복호화되면 해당 CA에서 발급한 인증서가 맞다는 것이 증명되는 것이고, 만약 등록된 CA가 아니거나, 등록된 CA의 인증서처럼 꾸몄다면 이 과정에서 발각되어 브라우저에서 경고를 보낸다.

     

    위 절차로 인증서가 유효함이 증명되면, 브라우저는 Client Hello과정에서 자신이 생성한 난수와 Server Hello 과정에서 서버가 생성한 난수를 이용하여 premaster secret을 생성하고, 전송받은 SSL인증서에 포함된 서버의 공개키로 암호화하여 서버로 전송한다.

     

     

    Client Key Exchange 메세지가 전달되고, 서버가 premaster secret을 성공적으로 전달 받으면 클라이언트와 서버 모두 대칭키 session key를 생성한다. 이때 session key는 위에서 주고받은 클라이언트와 서버의 랜덤 난수와 premaster secret을 비트 크기를 통일시킨 master secret을 이용하여 생성한다. premaster secret이 서버의 공개키로 암호화하여 서버가 전달받았으므로, 서버 자신의 개인키로 복호화하여 사용한다.

     

     

    session key를 성공적으로 생성하였으면 Change Cipher Spec 메시지를 전송한다. 클라이언트가 위 과정으로 성공적으로 세션키를 생성했으며, 이후 메시지는 암호화하여 전송할 것이다 라는 내용을 포함하고있다.

     

     

    마지막으로 Finished(Encrypted Handshake Message)를 메세지를 서버에 전송한다. 이때 클라이언트가 서버에게 handshake가 성공적으로 완료되었다는 메세지를 대칭키인 session key로 암호화하여 전달한다.

     

     

     

    5. Change Cipher Sepc, Finished (~168ms 부분)

    4번 과정에서와 같이 서버 또한 클라이언트에게 성공적으로 세션키를 생성했으며, 이후 메세지는 암호화하여 전송할것이라는 Change Cipher Spec 메시지와, 성공적으로 handshake가 종료되었음을 세션키로 암호화한 Finished 메시지를 전송한다.

     

     

     

    6. Application Data (168ms~ 부분)

    서로 상대방에게 전송할 데이터를 암호화하여 전송한다.

     

     

     

    위 과정을 볼 수 있는 패킷 캡쳐 과정을 아래에서 확인할 수 있다.

    https://feel5ny.github.io/2019/12/08/HTTP_014_02/

     

    HTTPS의 세부사항

    최근 인증서 관련 이슈를 만난적이 있었는데,이번 장을 통해서 조금이나마 이해가 될 수 있게 되었다 :) HTTPS는 HTTP의 가장 유명한 보안 버전이다. HTTPS는 HTTP 프로토콜에 대칭, 비대칭 인증서 기

    feel5ny.github.io

     

     

     

     

    🌱 Certificate(인증서)

     

    SSL/TLS 인증서는 해당 서버가 신뢰할 수 있는 진짜 서버인지 확인하여 다른 시스템에 대한 암호화된 네트워크 연결을 설정할 수 있도록 하는 디지털 객체를 말한다.

     

    SSL/TLS 인증서에는 다음과 같은 정보를 포함하고 있다.

     

    • 서비스 정보 : 인증서를 발급한 CA 정보, 도메인
    • 서버 측의 공개키
    • 지문, 디지털 서명

     

     

    CA에서 인증서를 발급받는 과정

     

    먼저 발급받고자 하는 기관은 도메인과 같은 자신의 사이트 정보와 공개키를 CA에게 제출한다. 그러면 CA는 검증을 거친 후, 발급받고자 하는 기관의 공개키를 SHA-256 등을 이용하여 해시한다.

     

    이렇게 해시한 값을 지문(Finger Print)라고 부른다.

     

     

    이후 지문을 CA의 비밀키로 암호화하고 인증서의 발급자 서명으로 등록하는데, 이 서명을 디지털 서명(Digital Signing)이라고 한다.

     

    최종적으로 CA는 디지털 서명, 발급자 정보 등이 동록되어있는 인증서를 발급해준다.

     

     

     

    이러한 절차처럼, 하위 인증서가 포함하고 있는 공개키를 상위 인증 기관이 본인의 비밀키로 암호화하여 상호 보증하는 것을 인증서 체인(Certificate Chain)이라고 한다.

     

    만약 내가 인증서를 발급받는 CA가 Root CA가 아닌 경우에는, 해당 CA 또한 상위 CA에게 인증서를 발급받은 것이다. 일반적으로 인증서 체인은 3단계에 걸치는 경우가 대부분이다.

     

    1. tistorty.com의 인증서는 그 상위 인증서인 Thawte TLS RSA CA G1의 인증기관인 Intermediate CA의 비밀키로 암호화되었다.
    2. Thawte TLS RSA CA G1 인증서는 그 상위 인증서인 DigiCert Global Root G2의 인증기관의 비밀키로 암호화되었다.
    3. DigiCert Global Root G2 인증서는 Root CA이기 때문에 Self-Signed 되었다.

     

    이때 Self-Signed란 자신의 인증서를 해시한 후, CA가 아닌 자신의 비밀키로 암호화하여 서명하는 방식이다.

     

    Root CA에서 사용되는 것과 같이, CA 인증과 상관 없이 Self-Signed로 발행하는 인증서를 사설 인증서라고 한다. 홈페이지에서 "신뢰할 수 없는 사이트입니다" 라는 안내문이 뜨는 경우가 대표적인 사설 인증서를 사용한 경우이다. 직접 실습해볼수도 있다. 

     

    아래 블로그에서 확인할 수 있다.

    https://aowwl.tistory.com/313

     

    [CN] HTTPS 실습

    웹 서버에 https를 적용하기 위해 SSL 인증서를 발급받아보자. 1. openssl 설치 https://code.google.com/archive/p/openssl-for-windows/downloads Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com https

    aowwl.tistory.com

     

     

     

     

    기업은 웹 서버에 SSL/TLS 인증서를 설치하여 SSL/TLS 보안 웹사이트를 만드는데, 이처럼 SSL/TLS 인증서가 사용되어 웹 사이트와 사용자 간에 신뢰 관계를 설정한다. 이렇게 만들어진 SSL/TLS 보안 웹사이트는 아래와 같은 특징이 있다.

     

    • 웹 브라우저의 자물쇠 아이콘 및 녹색 주소 표시줄
    • 브라우저의 웹 사이트 주소에 https 접두사 포함
    • 유효한 TLS 인증서 : URL 주소 표시줄의 자물쇠 아이콘을 클릭하면 SSL/TLS 인증서가 유효한지 확인 가능.
    • 암호화된 연결이 설정되면 클라이언트와 웹 서버만 전송된 데이터를 볼 수 있다.

     

     

     

     

     

    🌱 Cipher Suite (암호화 모음)

     

     

     

     

     

     

    📁 Toy TLS 프로토콜(T-TLS)

     

    toy TLS 프로토콜을 만든다고 가정할 때, 전송 계층에서 보안을 위해서는 아래 4가지가 필요하다.

     

    1. handshake : 각자의 인증서, 개인키를 서로 인증하거나 공유 비밀키를 만든다.

    2. key derivation : 공유 비밀키를 이용

    3. data transfer

    4. connection closure

     

    initial handshake

     

    t-tls의 handshake는 위와 같은 과정을 따른다.

     

    - 밥은 앨리스와 TCP 연결을 수립한다.

    - 밥은 앨리스가 진짜 앨리스인지 검증한다.

    - 밥은 앨리스에게 master secret key(MS)를 보낸다. 이 MS는 TLS 세션에 필요한 나머지 모든 키들을 생성하는데 사용된다.

     

    이 과정은 TCP handshake를 포함하여 클라이언트가 데이터를 다 받을 수 있을때까지 3RTT(round trip time)이 소요되므로 다소 오래걸린다는 단점이 있다.

     

     

     

    cryptographic keys

     

     

     

     

     

    더보기

    참고

    https://velog.io/@dltmdrl1244/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-8-5.-TLS

     

    [네트워크] 8-5. TLS

    [네트워크] 8-5. TLS

    velog.io

    https://velog.io/@pu1etproof/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%8A%A4%ED%84%B0%EB%94%94-2%EC%A3%BC%EC%B0%A8-DNS

     

    네트워크 스터디 2주차 - DNS

    많은 컴퓨터들이 인터넷 상에서 서로를 인식하기 위해 지정받은 식별용 번호이다.현재는 IPv4(32비트)로 구성되어 있다.시간이 갈수록 IPv4 주소의 부족으로 IPv6가 생겼는데, 128비트 구성되기 때문

    velog.io

    https://velog.io/@shininghyunho/%EC%A0%95%EB%A6%AC-HTTPHTTPS

     

    [정리] HTTPS의 보안성 저리

    SSL 동작방식을 통한 HTTPS의 원리

    velog.io

    https://babbab2.tistory.com/5

     

    TLS(SSL) - 2. 인증서, CA, SSL 인증서를 통해 서버를 인증하는 방법

    안녕하세요. 소들입니다 :D 저번 시간에 TLS의 정의, 암호화 방식에 대해 알아봤죠? 이번엔 TLS 인증서에 대해 공부해볼 거예요. •'-'•)و✧ 복습을 하자면 TLS의 암호화 방식은 대칭키 방식 + 비대

    babbab2.tistory.com

    https://velog.io/@kaitlin_k/HTTPS-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

     

    SSL handshake

    웹 서버 443포트를 이용한 TCP 연결과 SSL 핸드셰이크를 통한 HTTP 통신 암호화하기

    velog.io

    https://itwiki.kr/w/TLS(SSL)

     

    IT위키

    IT에 관한 모든 지식. 함께 만들어가는 깨끗한 위키

    itwiki.kr

    https://aws.amazon.com/ko/what-is/ssl-certificate/

     

    SSL 인증서란 무엇인가요? - SSL/TLS 인증서 설명 - AWS

    AWS Certificate Manager(ACM)는 AWS 서비스 및 연결된 내부 리소스에 사용할 공인 및 사설 SSL/TLS 인증서를 손쉽게 프로비저닝, 관리 및 배포할 수 있도록 지원하는 서비스입니다. ACM은 SSL/TLS 인증서를 구

    aws.amazon.com

     

    728x90
    반응형
    LIST