쳉지로그

[네트워크] SSL(Secure Socket Layer) 본문

네트워크/기초 용어

[네트워크] SSL(Secure Socket Layer)

쳉지 2021. 10. 5. 14:05
SSL(Secure Socket Layer)이란?

- SSL은 네트워크에서 메시지 전송 시 보안을 적용하기 위해 개발된 표준프로토콜로, 웹 서버와 브라우저 사이의 종단 간 보안과 데이터 무결성을 보증한다.

출처 : Digicert

 

SSL? TLS? HTTPS?

- SSL과 TLS는 보안 계층을 만들어 HTTPS 뿐만 아니라 FTP, SMTP와 같이 다른 응용 프로토콜에도 적용할 수 있다. HTTPS는 TLS와 HTTP가 조합된 프로토콜만을 가리키는 것이다.

- TLS(SSL 3.0 version 표준)는 가장 최신 기술로 더욱 강력한 SSL이다. 하지만 일반적으로 SSL이 더 많이 사용되는 용어로, 여전히 보안 인증서는 SSL이라고 불린다. 즉, TLS와 SSL은 같은 의미의 용어라고 봐도 무방하다.

 

 

SSL 인증서

- 클라이언트와 서버간의 통신을 제 3자(CA or Root certificate)가 보증해주는 전자화 문서

  *CA(Certificate Authority) : 인증서를 제공하는 (신뢰성이 엄격하게 공인된) 민간기업들

  • 통신 내용이 공격자에게 노출되는 것을 막을 수 있다. (암호화)
  • 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지를 판단할 수 있다.
  • 서버와 클라이언트가 주고받는 통신 내용을 악의적으로 변조하는 것을 방지할 수 있다.

 

 

SSL에서 사용하는 암호화 종류(대칭키+공개키)

- SSL은 보안과 성능상의 이유로 두 가지 암호화 기법을 혼용해서 사용한다.

- 각 단점을 보완 (대칭키 : 보안 위험성 / 공개키 : 많은 컴퓨터 자원 사용)

- 실제 데이터 : 대칭키 / 대칭키의 키 : 공개키

 

 

  • 대칭키(symmetric-key algorithm) : 암호화와 복호화에 같은 암호 키를 사용한다.

     - 암호를 주고 받는 사람들(수신자, 송신자) 사이에 대칭키를 전달하는 것이 어려움

     - 매우 빠르지만, 키가 유출되면 공격에 노출 위험

 

  • 공개키(public-key cryptography) : 암호화와 복호화에 사용하는 키가 서로 다르다.

     - 암호화에 사용되는 키는 공개키(public key), 복호화에 사용되는 키는 개인키(private key)

     - 송신자 : 수신자의 공개키를 받아 데이터를 암호화하여 네트워크를 통해 원격지에 전달

     - 수신자 : 공개키로 암호화된 데이터를 자신의 개인키로 복호화

출처 : 위키백과

 

 

SSL의 동작 단계

1. 악수(handshake)

  1) 클라이언트가 서버에 접속 (Client Hello)

     - 서버에 보내는 정보 : 클라이언트 측에서 생성한 랜덤 데이터, 클라이언트가 지원하는 암호화 방식들, 세션 아이디

  2) 서버 응답 (Server Hello)

     - 클라이언트에 보내는 정보 : 서버 측에서 생성한 랜덤 데이터, 서버가 선택한 클라이언트의 암호화 방식, 인증서

  3) 클라이언트는 인증서가 CA에 의해 발급된 것인지 확인하기 위해 클라이언트에 내장된 CA 리스트 확인

       - 해당 CA의 공개키를 이용해 인증서를 복호화한다.

       - 복호화를 통해 클라이언트는 인증서에 들어있는 서버의 공개키를 획득한다.

      클라이언트와 서버가 생성한 랜덤 데이터를 가지고 pre master secret 암호키 생성

       - 인증서에서 복호화해 획득한 서버의 공개키로 pre master secret 키를 암호화해서 서버로 전송

       - 서버는 자신의 비공개키로 pre master secret 키를 복호화

  4) 서버와 클라이언트 모두 pre master secret값을 master secert 값으로 만든다.

     - master secret으로 session key(세션키) 생성

  5) 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화한다.

  6) 핸드쉐이크 종료를 서로에게 알린다.

 

2. 전송(세션)

- 실제로 서버와 클라이언트가 데이터를 주고 받는 단계이다.

- 정보 전달 이전에 세션키 값을 이용해서 대칭키 방식으로 암호화한다.

- 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화하고, 실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터를 주고 받는다.

 

3. 세션 종료

- 데이터의 전송이 완료되면 SSL 통신이 끝났음을 서로에게 알려주고, 세션키(대칭키)를 폐기한다.

Comments