본문 바로가기
Develop

[보안] SSL (Secure Socket Layer) 동작방식

by 루시킴 2021. 11. 6.

HTTPS는 HTTP와 통신하는 소켓을 SSL로 대체한 것이다. SSL프로토콜은 보안 프로토콜로 대칭키/비대칭키 기반으로 데이터를 암호화한다.

실제 전송되는 데이터의 암호화에는 대칭키 암호화 방식을 사용하고, 키 교환 시에는 비대칭키 암호화 방식을 사용한다.

 

그럼 먼저 이 두개의 개념을 알아보자. 

 

대칭키 

  • 암복호화에 사용되는 키가 동일한 암호화 방식
  • 비대칭키보다 빠른속도로 암복호화하는 하는 장점을 가짐
  • 다른 사람들에게 내가 정한 비밀키가 무엇인지 알려줘야하는 키교환 문제 존재
  • 비밀키를 알려주다보면 키가 노출되어 보안문제 가능성 존재

비대칭키 

  • 암복호화에 사용되는 키가 다른 암호화 방식
  • 개키로 암호화하고 공개키와 매칭되는 개인키로만 복호화 가능
  • 공개키는 누구든지 알아도 상관없고 개인키는 복호화해야 하는 대상만 알 수 있도록 잘 보관
  • 키가 공개되어 있어 키교환 문제는 해결하지만 속도가 느림 
  • 계산하는데 복잡하고 시간복잡도가 높음

HTTPS통신에는 제 3자 인증을 사용한다. Let's Encrypt와 같은 인증기관으로 부터 공인인증서를 발급받아 서버에 설치해야 HTTPS통신을 할 수 있다.

 

SSL 동작 방식

i) 사용자가 웹브라우저로 사이트에 접속하면 웹서버는 인증서를 웹 브라우저에게 보낸다. 이 인증서에는 인증기관의 개인키로 암호화된 사이트의 정보와 공개키가 들어 있다.

 

ii) 웹 브라우저는 이미 가지고 있는 인증기관의 공개키로 웹 서버에서 받은 인증서를 복호화 해서 확인한다.

 

iii) 웹 브라우저는 실제 데이터의 암호화에 사용될 대칭키를 생성하고, 인증서에서 꺼낸 웹 서버 측의 공개키로 암호화 해서 웹 서버로 보낸다. 

 

iv) 웹서버는 자신이 가지고 있는 개인키로 웹 브라우저가 보내온 대칭키를 복호화 해서 얻는다. 이제 이 대칭키로 데이터를 암호화해서 주고 받게 된다. 

 

 

References
https://offbyone.tistory.com/274

'Develop' 카테고리의 다른 글

[웹서버] Apache vs Nginx (Event-driven 구조란?)  (0) 2021.11.06

댓글