[Study] SSL, HTTPS

조혜인·2022년 8월 20일
post-thumbnail

  이전에는 대부분의 홈페이지들의 URI가 http로 시작했었다. 그런데 언제부턴가 https로 홈페이지들의 URI가 시작되는 걸 볼 수 있다. 이전과 다르게 뒤에 s가 붙었는데 이 s는 Secure 즉, 보안을 의미한다. 이렇게 https를 통한 인터넷 접속은 현재 실행 중인 사용자의 컴퓨터가 해당 사이트의 서버와 암호화 통신을 하고있다는 것을 의미한다. https를 통한 인터넷 접속은 SSL(Secure Socket Layer)을 이용한 것이다. SSL 암호화 통신은 SSL 혹은 TLS(Transport Layer Security)라는 보안 프로토콜을 통해 브라우저와 서버가 보안이 향상된 통신을 하는 것을 말한다.

💡 SSL과 TLS는 같은 의미라고 보면 된다. SSL이후에 TLS가 출시되었는데, 일반적으로 SSL을 많이 사용한다고 한다.


📌 SSL과 Https의 차이

  SSL은 '보안 계층' 이라는 독립적인 프로토콜 계층을 만드는데, 이 계층은 응용계층과 전송계층 사이에 위치한다. Https는 SSL 또는 TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP통신을 하는 프로토콜이다. 정리하자면, SSL과 TLS는 HTTP뿐만 아니라 FTP, SMTP와 같이 다른 프로토콜에도 적용할 수 있다. HTTPS의 경우에는 TLS와 HTTP가 조합된 프로토콜만을 가리킨다.


📌 SSL의 3단계 통신과정

  1. SSL Handshake : 서로 데이터를 주고받기 위해 어떤 방법을 사용해야하는지 서로의 상태를 파악한다.
  2. Transfer : Handshake이후 서로 간의 협상이 완료되면 SSL 세션이 생성되고 클라이언트와 서버는 원하는 데이터를 주고받는다.
  3. Finish : 데이터 전송이 완료되면 서로에게 끝임을 알리고 해당 세션을 종료한다.

Handshake

  • 마치 사람과 사람이 대화하는 것처럼 진행된다. 클라이언트는 자신의 브라우저가 지원할 수 있는 암호화 방식을 먼저 제시하고 랜덤 데이터를 생성하여 추가로 전송한다. 서버는 클라이언트가 제시한 암호화 방식 중 하나를 선정하여 알려준다. 클라이언트와 마찬가지로 랜덤 데이터를 생성하여 클라이언트에 전달한다. 클라이언트는 미리 주고받은 자신의 랜덤 데이터와 서버에게 받은 랜덤 데이터를 참고하여 서버와 암호화 통신을 할 때 사용할 키를 생성한 후 서버에게 전달한다. 이렇게 handshake과정이 마무리되면 클라이언트와 서버 모두 'finished'라는 메시지를 보낸다. 이후로는 클라이언트가 생성한 키를 사용하여 암호화된 데이터를 주고받는다.

📌 참고

profile
코딩은 역시 재밌군

0개의 댓글