[HTTP] HTTPS와 SSL

JJBIN·2024년 3월 28일

HTTP

목록 보기
3/6

1. HTTPS

HTTP는 메시지를 평문으로 전송하므로 보안에 취약하다.
가령 인증 정보, 신용카드 정보와 같이 민감한 정보들이 그대로 노출되어 인터넷 상으로 전송된다.

HTTPS는 443 포트를 사용하며 SSL인증을 사용하여 HTTP 메시지를 암호화 함으로써 더 나은 보안을 제공한다.

HTTPS는 HTTP와 별도의 프로토콜이 아닌 HTTP아래에 SSL(Secure Sockets Layer)이라는 별도의 레이어를 갖춘 형태다.

HTTPS를 사용하면 다음과 같은 장점을 누릴 수 있다.

  1. 데이터를 암호화한다. 누군가 데이터를 가로채더라도 해독하기 매우 어려운 복잡한 문자만 보게 된다. (데이터 기밀성)
  2. 데이터가 의도된 수신자에 도착하기 전에 조작되지 않았다는 것을 확인한다. (데이터 무결성)
  3. 신뢰할 수 있는 인증 기관(CA)을 통해 올바른 서버와 통신하고 있는지 확인할 수 있다.
  4. 일부 검색 엔진에서 SEO 우선순위가 높아진다.

2. 대칭 키와 공개 키(비대칭 키)

1) 대칭 키 암호화

대칭 키(symmetric key)란 암호화(encryption)와 복호화(decryption)을 하나의 키로 수행하는 것을 뜻한다.

데이터를 송신하는 쪽과 수신하는 쪽 모두 같은 키를 사용하기 때문에 대칭 키라고 부른다.

A. 대칭 키를 통한 데이터 전송

  1. 수신자와 송신자가 대칭 키를 교환한다.
  2. 전송할 데이터를 키를 사용하여 암호화한뒤 송신한다.
  3. 수신한 데이터를 같은 키를 사용하여 복호화한다.

대칭 키는 사용하기 쉽고 속도가 빠르지만 키를 교환하는 과정에서 탈취 당할 경우 전체 데이터가 노출된다는 단점이 있다.

대칭키 암호화 예시


2) 공개 키 암호화

대칭 키의 단점을 보완하기 위한 대안으로 공개 키 암호화가 있다.

공개 키 암호화는 암호화를 위한 공개 키(public key)와 복호화를 위한 개인 키(private key)로 이루어진다.

공개키를 사용해 암호화된 데이터는 오직 개인키를 사용해서만 복호화할 수 있으므로 중간에 데이터가 탈취되더라도 안전하다.

하나의 키로 암호화와 복호화를 모두 수행하는 대칭키와 다르게 2개의 서로 다른 키로 암호화 및 복호화 하므로 비대칭 키라고도 부른다.

A. 공개 키를 통한 데이터 전송

  1. 수신자가 공개키와 개인키 쌍을 생성한다.
  2. 송신자는 공개키를 사용하여 데이터를 암호화하여 전송한다.
  3. 수신자는 개인키를 사용하여 데이터를 복호화한다.

공개 키를 사용하면 대칭 키보다는 느리지만 더 나은 보안성을 얻을 수 있다.

공개키 암호화 예시


3) 디지털 서명

디지털 서명(digital signature)은 네트워크에서 송신자의 신원을 증명하는 방법으로, 송신자가 자신의 비밀키로 암호화한 메시지를 수신자가 송신자의 공용 키로 해독하는 과정이다.

공개 키와 개인 키는 쌍을 이루기 때문에 개인 키로 암호화하면 공개 키로 복호화할 수 있다.
이를 이용하여 전자 서명의 일종인 디지털 서명을 생성할 수 있다.

A. 디지털 서명 및 인증 과정

  1. 데이터 송신자는 데이터로 복호화가 불가능한 단방향 해시를 생성한다.
  2. 해시를 비밀 키로 암호화하여 디지털 서명을 생성한다.
  3. 데이터와 서명을 함께 전송한다.
  4. 수신자는 데이터에 같은 해시 함수를 적용한 뒤 해시 값을 얻는다.
  5. 공개키를 사용해 서명을 복호화한 내용과 해시 값을 비교해 유효성을 확인한다.

디지털 서명 예시

B. 디지털 서명의 이점

  1. 신원 인증
    서명이 유효하다면(공개 키로 복호화가 된다면) 개인 키를 보유한 송신자가 전송한 메시지임이 증명된다.

  2. 무결성 보장
    데이터 전송 과정에서 변경이 일어나지 않았음이 보장된다. 중간에 데이터가 변경되었다면 서명이 무효화 되기 때문에 위변조 사실을 알 수 있다.


3. SSL/TLS

SSL(Secure Sockets Layer)은 넷스케이프 사에 의해 개발된 클라이언트와 서버 간 데이터를 안정하게 전송하기 위한 암호화 프로토콜이다.

TLS(Transport Layer Security)는 국제 표준 기구인 IETF(Internet Engineering Task Force)에 의해 제안되었으며, SSL3.0을 기반으로 발전시킨 것이다.

SSL과 TLS는 거의 호환되며 이러한 역사로 인해 많이 혼용되서 사용된다.

SSL은 Appication Layer와 TCP Layer 사이에서 동작한다.


1) SSL 인증서

HTTPS 통신은 SSL 인증서(공식적으로는 TLS 인증서)가 있는 웹사이트나 서버에서만 수행할 수 있다.
SSL 인증서는 사람의 신원을 보증하는 신분증과 같다.

SSL인증서는 디지털 서명을 통해 암호화, 인증, 무결성이라는 세 가지 주요 요소를 달성할 수 있다.

A. CA

CA(Certificate authority)는 인증서를 발급하고 관리하는 신뢰할 수 있는 기관이다.
브라우저는 내부적으로 CA의 리스트를 가지고 있어 해당 사이트가 공인된 인증서를 사용하는지 확인할 수 있다.

인증서는 CA뿐만 아니라 사설 인증기관으로부터 발급 받거나 자체 서명 인증서를 만들 수 있다.

만약 CA에서 발급 받지 않은 인증서를 사용하는 경우 브라우저 주소 창에 안전하지 않다는 표시가 뜬다.

SSL 인증서는 다음 정보를 포함한다.

  • 인증서가 발급된 대상 도메인 이름
  • 발급받은 사람, 조직, 장치
  • 발급한 인증 기관
  • 인증 기관의 디지털 서명
  • 관련 하위 도메인
  • 인증서 발급 날짜
  • 인증서 만료 날짜
  • 공개 키(개인 키는 비밀로 유지됨)

2) SSL 암호화 방식

SSL/TLS는 대칭 키와 공개 키 방식을 모두 사용하여 통신한다.

공개 키만 사용할 경우 암호화 비용이 비싸다.
공개 키를 사용하여 대칭 키 교환 과정을 암호화함으로써 대칭키의 단점을 상쇄할 수 있다.
따라서 최초에 공개 키 방식을 사용해 대칭 키를 교환한 뒤 비용이 저렴한 대칭 키를 통해 암호화한다.

HTTPS를 통해 서버와 통신을 시작할 때마다 TCP handshake에 이어서 SSL Handshake가 발생한다.
SSL handshake 과정을 통해 공개 키를 사용해 암호화된 대칭 키를 교환한다.
(엄밀하게 말하면 대칭 키를 만들기 위한 재료를 교환한 뒤 클라이언트와 서버 각자가 생성한다.)

이러한 대칭 키를 세션 키라고 부른다. (하나의 세션에서만 사용하는 대칭 키)

SSl Handshake를 통해 생성한 세션 키를 사용해 대칭 키 암호화 방식으로 통신한다.


3) SSL Handshake

SSL/TLS Handsake

handshake 과정

  1. ClientHello
    클라이언트가 SSL/TLS 연결을 요청하기 위해 메시지를 보낸다. 다음 데이터가 포함된다.
    • 암호화 방식 : 클라이언트가 지원하는 SSL/TLS 버전 및 암호화 알고리즘
    • Client Random : 클라이언트가 생성한 임의의 바이트 문자열 (nonce)
    • Session ID : 이미 서버와 ssl handshake를 한 적이 있다면 기존 세션 ID를 전달하여 기존 세션을 재사용한다.
  2. ServerHello
    서버는 클라이언트에게 연결을 승인하는 메시지를 보낸다. 다음 데이터가 포함된다.
    • SSL 인증서
    • 서버가 선택한 암호화 방식
    • Server Random : 서버가 생성한 임의의 바이트 문자열 (nonce)

여기까지 평문 교환

  1. 인증서 확인
    • 인증서를 통해 서버의 신원 확인(디지털 서명 참조)
    • CA를 통해 발급된 인증서인지 확인
  2. pre master secret 전달
    • 클라이언트는 Server Random과 Client Random을 조합하여 pre master secret을 생성한다.
    • 인증서를 통해 획득한 공개 키를 사용하여 암호화한다.
    • pre master secret은 대칭 키를 생성하기 위해 사용할 것이므로 노출되서는 안된다.
    • pre master secret을 전달함으로써 서버와 클라이언트 모두 pre master secretm 서버 랜덤, 클라이언트 랜덤을 소유하게 된다.
  3. master secret 생성
    • 서버와 클라이언트는 pre master secret, 서버 랜덤, 클라이언트 랜덤을 조합하여 같은 master secret을 생성하게 된다.
    • 서버는 pre master secret을 자신의 비밀 키를 사용하여 복호화 한다.
  4. 세션 키 생성
    • master secret을 사용하여 세션 키를 생성한다.
    • 세션 키는 대칭 키 암호화를 위해 사용된다.
  5. Change Cipher Spec
    • 상대에게 이제부터 세션 키를 사용하여 대칭 키 암호화 방식으로 통신할 것임을 알린다.

SSL handshake 이후 세션 키를 사용하여 대칭 키 암호화 방식으로 데이터를 전송한다.

SSL/TLS Handsake


References

생활코딩, 『HTTPS와 SSL 인증서』
Geeky much!, 『Private key & Public key Encryption!』, Medium
D'CENT Academy, 『공개키 암호가 무엇인가요?』
업비트 투자자보호센터, 『디지털 서명이란 무엇인가?』
위키백과, 『디지털 서명』
GeeksForGeeks, 『Digital Signatures and Certificates』
GeeksForGeeks, 『Secure Socket Layer (SSL)』
CloudFlare, 『SSL이란 무엇입니까? | SSL 정의』
CloudFlare, 『SSL 인증이란 무엇입니까?』
CloudFlare, 『TLS 핸드셰이크의 원리는 무엇일까요? | SSL 핸드셰이크』
CloudFlare, 『세션 키란? 세션 키와 TLS 핸드셰이크』
Sandip Roy, 『Pre-master Secret vs. Master Secret vs. Private Key vs. Shared Secret』, Baeldung

0개의 댓글