SSL

SSL이란?

SSL(Secure Socket Layer)은 웹 표준 암호화 통신이다.

  • 클라이언트와 서버 사이에 송수신되는 정보를 암호화하여 전송하는 통신계층이다.

  • 웹에서는 브라우저와 서버간 보안을 위해 공개키/개인키 대칭키를 기반으로 사용한다.

  • 일반적으로 443포트를 사용한다.

  • HTTPS HTTP에 SSL을 적용한 보안된 HTTP 통신을 하는 프로토콜이다.

  • SSL은 HTTP 뿐만 아니라 FTP, SMTP에도 적용할 수 있다.

SSL과 HTTPS의 차이

HTTP + SSL 이 곧 HTTPS라고 할 수 있다. 따라서 SSL은 웹서비스 외에도 네트워크에서 사용되는 넓은 의미라고 볼 수 있다. 다시말해 SSL 위에서 작동하는 웹 프로토콜이 HTTPS이다.

인증과정 (SSL Handshake)

  1. ClientHello

    1. 클라이언트가 서버로 “Hello” 메세지를 전달하면서 HandShake 개시
    2. 클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군(chipher suite 목록), 무작위 바이트 문자열을 포함한다.
  2. Server Hello

    1. 서버의 SSL 인증서(공개키 포함), 서버에서 선택한 암호 제품군, 서버에서 생성한 무작위 바이트 문자열 포함
    2. 인증서에 공개키가 포함되지 않는 경우, 서버가 직접 전달한다(Server Key Exchange).
    3. Server Hello Done
  3. 인증

    1. 클라이언트가 서버의 SSL 인증서를 발행기관(CA)을 통해 검증.
    2. 해당 인증서가 발행기관(CA)에 의해 발급된 인증서인지, 서버가 실제 해당 도메인의 소유자인지를 확인

💡 서버는 인증서 발급을 위해 CA(인증기관)에 서버 공개키를 제출한다. CA에서는 자신의 개인키를 사용해서 서버 공개키를 Hash로 변환한 뒤, 이를 CA 개인키로 암호화 한다. 이를 Signature라고 한다. 서버는 클라이언트에게 서버-공개키, Signature 2가지를 전송한다. 클라이언트는 CA-공개키(공개되어 있음)를 사용해서 Signature를 복호화 하면 서버-공개키의 Hash값을 얻을 수 있다. 서버로부터 같이 전달 받은 서버-공개키를 Hash로 변환하여 2가지를 비교해 일치한다면, 인증서는 조작된 것이 아님을 알 수 있다. 클라이언트가 브라우저 또는 안드로이드 기기인 경우, 인증서 발급 주요 인증기관 CA의 리스트와 각각의 공개키를 이미 내장하고 있다. 그래서 매번 CA에 공개키를 요청할 필요는 없지만, 리스트에 없는 CA인 경우 인터넷 통신을 통해 인증기관 정보와 공개키를 가져올 수 있다.

  1. 대칭키 전달 (Client Key Exchange, Change Ciper Spec)

    1. 클라이언트는 데이터를 암호화하기 위한 대칭키(비밀키, 데이터를 암호화하는 키)를 생성한다.
    2. 생성한 대칭키를 서버에서 받은 공개키로 암호화 한다. (Client Key Exchange)
    3. SSL Handshake 완료를 알린다 (Change Cipher Spec)
  2. Server / Client SSL Handshake Finished

    1. 클라이언트에서 전달한 암호화된 대칭키를 개인키로 복호화.
    2. 서버와 클라이언트 모두 동일한 대칭키 보유. 통신 준비 완료.
    3. Finished 패킷을 전달하여 SSL Handshake를 종료

References

인증서 발급 가이드?

국내 인증서 발급기관

Let’s encrypt : 무료이고 자동갱신이 가능

https://computing-jhson.tistory.com/117