[SSL 인증서 발급] http vs https 둘의 차이점은?

황수홍·2024년 8월 6일

SSL 인증서란?

보안서버 SSL인증서는 사용자의 인터넷 브라우저와 사이트의 웹서버 상의 암호화 통신을 지원하여 해킹을 당하더라도 고객의 개인정보를 소중하게 지켜 줍니다.

SSL 인증서는 웹서버와 웹사이트에서 이루어지는 모든 정보전송을 https 암호화프로토콜을 통해 안전하게 전송되도록 하는 인증서 입니다. SSL을 사용하면 로그인, 회원가입, 예약 등의 개인정보를 입력하더라도 스니핑(sniffing)에 고객의 개인정보를 소중하게 지켜 줍ㅂ니다.

또한 SSL 인증서는 전자상거래 기업 또는 공공기관의 신원을 확인하여 고객의 신뢰를 얻을 수 있습니다.

SSL 인증서 발급 과정 및 작동 원리

서버에서 HTTPS 프로토콜 사용을 위해 SSL 인증서를 발급받는 과정은 아래와 같다. 여기서 CA 란 인증기관을 뜻한다.

  1. (서버) 서버의 공개키(public key)와 비밀키(private key)를 생성한다.
  2. (서버 → CA) 인증서를 발급받기 위해, 서버는 CA 에 아래의 정보들을 전달한다.
    • 1번에서 생성한서버의 공개키(public key)
    • 서버의 각종 정보
  3. (CA) 2번에서 서버로부터 받은 정보(서버의 공개키도 들어있음)들을 담아 SSL 인증서를 발급한다.
    4. (CA) 3번에서 만든 인증서를 암호화하기 위해, CA의 공개키(public key)와 비밀키(private key)를 생성한다. CA의 비밀키를 이용해 SSL 인증서를 암호화한다.
  4. (CA → 서버) 4번에서 암호화한 SSL 인증서를 다시 서버에 전달한다. SSL 인증서 발급 완료

위에서 굵게처리한 4번 과정을 잘 기억해둘 것. 아래에서 설명할 SSL Handshake에서 써먹는 개념이다.

이렇게 발급받은 SSL 인증서에 대한 정보(4번에서 생성한 CA의 공개키 정보까지)는 모두 공개되어 있다.
브라우저에서 모두 확인 가능

SSL Handshake 동작 원리 및 과정

Handshake 란? 악수, 쉽게 말하면

  • 서버와 클라이언트가 통신을 연결할 때 서로 악수(협상)를 통해 이런저런 정보를 주고받으며,

  • 신뢰할 수 있는 서버인지,

  • 통신할 때 암호화는 어떤 식으로 할지
    등등을 검증하고 정하는 과정이라고 생각하면 된다.

    SSL Handshake 의 궁극적 목표 2가지 (Handshake를 통해 얻는 2가지 중요 요소)

  • 서버와 클라이언트가 주고받을 데이터의 암호화 알고리즘을 결정

  • 서버와 클라이언트가 주고받을 데이터의 암호화를 위한 동일한 대칭키(데이터를 암호화하는 키)를 얻는다.

    SSL Handshake 과정


    위 이미지에서 노란색 플로우가 SSL Handshake 과정이다.
    파란색 플로우인(SYN, SYN ACK, ACK)는 TCP 프로토콜의 3-way handshaake로, HTTPS가 TCP 기반의 프로토콜이기 때문에 SSL Handshake에 앞서 연결을 생성하기 위한 과정이다.

  1. client → server 연결을 시도한다 (Client Hello)

    클라이언트에서 통신하고 싶은 서버로 연결을 시도하는 패킷을 전송한다. Client Hello 는, 말 그대로 client가 인사를 건넨다. 라고 이해하면 된다.

  2. server → client 응답 (Server Hello)

    1번에서 클라이언트에서 받은 인사(Client Hello 패킷)에 대해 서버가 응답을 한다. 이 역시 패킷을 찍어보면 Server Hello 라고 나오는 것을 확인할 수 있다.

  3. (4,5) server → client (Certificate, Server Key Exchange, Server Hello Done)

    서버는 2번 패킷 외에 클라이언트에 Certificate 라는 내용의 패킷을 보낸다.
    이 Certificate 라는 패킷에는 어떤 내용들이 담겨 있냐면, Server의 SSL 인증서 내용이 들어있다. 아래의 패킷 내부를 보면, 인증서의 signature algorithm, public key info 등을 확인할 수 있다. 마지막으로 server 가 행동을 마쳤다는 의미로 Server Hello Done 까지 보낸다.

  4. client → server (SSL 인증서 Certificate)

    클라이언트는 인증서를 발급한 인증기관(CA)의 공개키를 구한다. 구한 공개키를 이용해 SSL 인증서를 복호화한다. 복호화에 성공하면 인증서 검증에 성공하게 된다.

  5. client → server 대칭키(비밀키) 전달 (Client Key Exchange, Change Ciper Spec)

    이제 클라이언트는 서버와 원하는 데이터를 안전하게 주고받기 위해서는 전달하는 데이터를 암호화해야 한다. 클라이언트는 데이터를 암호화하기 위한 대칭키(비밀키, 데이터를 암호화하는 키)를 생성한다. 그냥 전달하면 탈취되어 누구나 주고받는 데이터를 볼 수 있을 수 있다. 그래서 클라이언트는 이 대칭키(비밀키)를 서버만 볼 수 있게 하기 위해, 서버의 공개키로 암호화를 해서 서버한테 전달한다. (Client Key Exchange)

  6. Server / client SSL Handshake Finished

    서버는 클라이언트가 5번에서 전달한 암호화된 대칭키(비밀키)를 받았다. 이 키는 서버의 공개키로 암호화 되었으니, 서버의 비밀키로 복호화해서 얻을 수 있다.
    이제 서버와 클라이언트 모두 동일한 대칭키(비밀키)를 갖고 있으니 통신할 준비가 되었다.

profile
대한민국 최고의 개발자(희망)

0개의 댓글