[네트워크] HTTPS, HTTP/3

변진상·2024년 2월 9일
0

학습 기록

목록 보기
12/31

이 글은 면접을 위한 CS 전공지식노트의 책을 읽고 학습 후 스터디 공유를 위한 글입니다.

HTTPS

  • HTTPS는 애플리케이션 계층과 전송계층 사이에 신뢰계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다.
  • HTTP/2는 HTTPS 위에서 동작 함.

SSL(Secure Socket Layer)/TLS(Transport Layer Security Protocol)

  • SSL/TLS은 전송 계층에서 보안을 제공하는 프로토콜. 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제 3자가 메세지를 도청하거나 변조하지 못하도록 한다.
  • SSL1.0 → SSL2.0 → SSL3.0 → TLS 1.0 → TLS 1.3까지 버전이 올라가 마지막으로 TLS로 명칭 변경 → 보통 이를 합쳐 SSL/TLS
  • 공격자가 서버인척 해 사용자의 정보를 가로채는 네트워크상의 인터셉트를 방지할 수 있다.
  • 보안 세션을 기반으로 데이터 암호화 → 보안 세션이 만들어 질 때 **인증 메커니즘**, **키 교환 암호화 알고리즘**, **해싱 알고리즘**이 사용된다.

보안 세션

  • 보안을 시작하고 끝나는 동안 유지되는 세션
  • SSL/TLS 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유한다.

💡 세션
운영체제가 사용자로부터 자신의 자산 이용을 허락하는 일정 기간. 즉, 사용자는 일정 시간 동안 응용 프로그램, 자원 등을 사용할 수 있다.

SSL/TLS 핸드셰이크

https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/

  • TLS 핸드셰이크는 TCP 핸드셰이크를 통해 커넥션이 열린 후에 발생(UDP는 DTLS라는 프로토콜이 있다고 함)

TLS 핸드셰이크 중 일어나는 일

  • 사용할 TLS 버전(TLS 1.0, 1.2, 1.3 등)을 지정

  • 사용할 암호 제품군(사이퍼 스위트를 기반으로)을 결정

  • 서버의 공개 키와 SSL 인증서 기관의 디지털 서명을 통해 서버의 ID를 인증

  • 핸드셰이크가 완료된 후에 대칭 암호화를 사용하기 위하여 세션 키를 생성

  • 핸드셰이크 진행 과정

  1. Client : Client Hello
    Client Hello 메시지 전송 패킷 전송

    💡 Client Hello 메시지의 내용
    - TLS Version 
    - Client 지원 암호화 알고리즘
    - Client Random (무작위 바이트 문자열, 대칭키를 만드는 데 사용)
    - Session ID
    - SNI(서버명)

  2. Server : Server Hello
    Client Hello에 대한 응답

    💡 Server Hello 메세지의 내용
    - TLS Version
    - 암호화 알고리즘(Client가 보낸 암호화 방식들 중 서버가 선택)
    - Server Random(무작위 바이트 문자열)
    - SessionID

  3. Server : Server Certificate
    서버의 인증서를 클라이언트에게 보내는 단계 + 필요에 따라 CA의 Certificate도 함께 전송
    → 이 패킷을 통해 서버의 인증서의 무결성 검증
  4. Server : Server Hello Done
    서버가 클라이언트에게 보낼 메시지를 모두 보냈다는 뜻
  5. Client : Client Key Exchange인증서 무결성 검증 이후 Client Random과 Server Random을 조합해 대칭키 생성→ 서버의 공개키로 암호화→ 암호화한 정보를 서버에 전송
  6. Server & Client : Change Cipher Spec
    모든 패킷은 협상된 알고리즘과 키를 이용해 암호화 하겠다는 메세지
  7. Server & Client : Finished
    핸드쉐이크 종료

[출처1: https://sunrise-min.tistory.com/entry/TLS-Handshake는-어떻게-진행되는가]

[출처2: [cloudflare의 what-happens-in-a-tls-handshake 아티클]https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/]

사이퍼 스위트

  • 통신 연결을 수립하는 데 사용하는 알고리즘 세트

인증 메커니즘

  • 인증 매커니즘은 CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이뤄진다.
  • CA에서 발급한 인증서는 안전한 연결을 시작하는데 있어 필요한 공개키를 클라이언트에게 제공 후 서버의 신뢰성을 보장한다.
  • 인증서의 구성 요소: 서비스 정보, 공개키, 지문, 디지털 서명 등… (참고로 CA를 할 수 있는 기업은 신뢰성이 엄격하게 공인된 기업들만 가능 → Comodo, GoDaddy, GlobalSign, Amazon 등)

CA 발급 과정

  • 자신의 사이트 정보와 공개키를 CA에 제출 → 공개키를 해시한 값인 지문(finger print)을 사용하는 CA의 비밀 키 등을 기반으로 CA 인증서 발급

암호화 알고리즘

  • 키 교환 암호화 알고리즘: ECDHE(대수곡선 기반), DHE(모듈식 기반) → 디피-헬만(Diffie-Hellman) 방식을 근간으로 만들어짐
  • 디피-헬만(Diffie-Hellman)
    - g, x, p를 알고 있다면 y를 구하기는 쉽지만, y, g, p를 안다면 x는 구하기 어렵다는 원리에 기반한 알고리즘

이 과정을 거쳐 공통의 암호 키가 생성이 된 키가 사전에 합의된 비밀키인 PSK(pre-shared key)와 같다면 공통의 암호키가 생성된 것을 확인할 수 있다.

→ 만약 공격자가 개인키 또는 공개키를 가지고도 PSK가 없기 때문에 아무 것도 할 수 없다.

0-RTT mode

만약 클라이언트가 이전에 방문한 사이트로 다시 방문한다면 SSL/TLS의 보안세션을 만드는데 필요한 통신을 생략 가능 이를 0-RTT 모드라고 한다.

이전에 수립한 세션에서 resumption main secret라는 키를 나누고 이를 가지고 세션티켓이라 불리는 것을 클라이언트에게 서버가 전송한다. 그럼 이후 이 세션티켓을 기반으로 클라이언트는 암호화된 데이터를 보낼 수 있고 서버와 클라이언트 사이에 TLS가 재계된다. 이를 통해 TLS 핸드쉐이크를 생략할 수 있다.

SEO(검색엔진 최적화)-HTTPS

구글에서 SSL 인증서 강조 + 사이트내 모든 요소가 동일 → HTTPS 서비스를 하는 사이트가 그렇지 않은 사이트보다 SEO 순위가 높을 것이라 공식적으로 발표 함.

💡 SEO(검색엔진 최적화)
사용자가 검색엔진을 통해 사이트를 검색 시 그 페이지를 상단에 노출시켜 많은 사람이 볼 수 있도록 하는 최적화

  • 책에서 제시되고 있는 방법
  1. 캐노니컬 태그 설정

    <link rel=”canonical” href=”https://aaaaa.com/aaaaa.php”/>
    한 사이트를 가리키는 주소가 여러개 존재할 때, 검색 엔진의 로봇이 어떤 주소가 원본인지 알 수 있도록 하기 위한 태그

    HTTP/1.1 200 OK
    Content-Type: application/pdf
    Link: ; rel="canonical"
    Content-Length: 4223
    ...
    ![](https://velog.velcdn.com/images/quswlstkd88/post/73333cb2-ade0-45e3-99c0-03537bb66dab/image.png)
    
    
  2. PageSpeedInsights에서 페이지 속도에 대한 리포팅을 받을 수 있다.

  3. 사이트맵 관리

사이트맵은 페이지, 동영상 및 기타 파일과 그 관계에 관한 정보를 제공하는 파일. 로봇의 크롤링을 효율화 한다.(출처)

사이트맵 제너레이터 사용, 직접 코드 작성으로 구축

```
?xml version="1.0"
encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
	<loc>http://kundol. co.kr/</loc>
    〈lastmod〉수정날짜</lastmod〉
	<changefreq>daily</changefrea>
  (priority›1. K/priority> </url> </urlset)
```
    

HTTPS 구축 방법

  1. CA에서 구매한 인증키 기반으로 HTTPS 서비스 구축
  2. 서버 앞단에 HTTPS를 제공하는 로드밸런서를 둠
  3. 서버 앞단에 HTTPS를 제공하는 CDN을 둬서 구축

HTTP/3

  • HTTP/2는 TCP 위에서 동작, HTTP/3는 QUIC이라는 계층 위에서 돌아간다.
  • UDP 기반으로 돌아간다.
  • 장점: HTTP/2의 장점이기도한 멀티플렉싱, 초기 연결 설정시 지연시간 감소라는 장점 존재
  • 순방향 오류 수정 메커니즘(FEC, Forword Error Correction)이 적용되어 있다.

사진 출처: 면접을 위한 CS 전공지식노트 서적

profile
자신을 개발하는 개발자!

0개의 댓글