SSL 이란


SSL은 Secure Socket Layer 라는 약자로 보안 소켓 레이어이다. 보통 443 포트를 사용하며 https:// 사용한다. SSL은 Netscape사에서 웹서버와 웹브라우저간의 보안을 위해 만들어졌으며, 공개키/개인키 대칭키 기반으로 사용한다.


공개키, 개인키

공개키로 암호화하고 공개키와 매칭되는 개인키로만 복호화할 수 있다. 따라서 공개키는 누구든지 알아도 상관없고 개인키는 복호화해야 하는 대상만 알 수 있도록 잘 보관해야 한다. 공개키/개인키는 계산하는데 복잡하고 시간복잡도가 높으므로 보통 모든 전송을 공개키/개인키 암호화기법을 이용하여 전송하는 것이 아니라, 전송할 것 들은 대칭키를 이용하여 암호화하고, 대칭키만을 공개키/개인키로 암호화하여 전송한다.

이런 과정을 통해 암호화한다해도 대상 사이트가 만약에 가짜사이트 또는 대상이 해커라면 사용자의 정보가 노출될 수 있다. 이 때문에 인증서라는 것이 있다.



인증서


https로 통신하는 웹사이트를 이용하다보면 웹브라우저에 자물쇠 표시가 있는데 해당 자물쇠를 눌러보면 보통 인증서가 있다. 이 인증서는 신뢰할 수 있는 제 3자 인증기관에서 발급받을 수 있으며 이 인증서에는 인증서의 해당 사이트의 공개키와 사이트의 정보들이 있다. 인증서가 전송될 때는 인증기관에서 제공하는 개인키로 암호화하여 전송된다.

인증서 또한 만약 가짜사이트 또는 해커가 인위적으로 만들었다면 사용자의 정보가 노출이 될 수 있는데 이를 막기 위해 인증기관의 공개키를 브라우저에게 알려주고 브라우저에서는 해당 사이트에서 제공하는 공개키가 아닌 브라우저의 공개키를 사용하기 때문에 대상이 인증기관인지 아닌지 판별할 수 있다.



Secure Socket Layer


  1. 사이트에서 인증기관(CA : Certificate Authority)에 인증요청
  2. 인증기관에서 검증 후에 사이트의 공개키와 정보를 인증기관의 개인키로 암호화, 인증기관의 공개키는 브라우저에 제공
  3. 사용자가 사이트로 접속 요청 시 사이트는 인증서 전송
  4. 사용자는 브라우저에 내장된 공개키로 인증서를 복호화 -> 사이트의 공개키로 대칭키를 암호화하여 전송
  5. 사이트는 전송받은 암호화된 대칭키를 사이트의 개인키로 복호화 -> 사용자, 사이트 같은 대칭키 획득
  6. 전송 시 해당 대칭키로 암호화하여 전송


각 인증서에는 만료기간이 있으며, 인증서의 만료되기 전에 갱신을 해야한다.