SSL(Secure Sockets Layer)

|

SSL

SSL(Secure Sockets Layer)는 데이터를 암호화하거나 통신 상대를 인증함으로써 데이터를 보호하는 프로토콜입니다. 보통 HTTP 통신을 할 때, ‘https://’로 시작하는 URL들이 대표적인 예시이며 HTTPS(HTTP over SSL)는 HTTP를 SSL로 암호화한 프로토콜입니다.


대표적인 SSL 서버 프로그램

SSL 서비스를 제공하는 대표적인 서버 프로그램으로는 오픈 소스인 ‘OpenSSL’이나 Windows에 내장되어 있는 ‘IIS’가 있습니다. OpenSL은 주로 Apache 웹 서버와 연계해서 사용합니다.


SSL로 방지할 수 있는 위험

SSL은 데이터 보호를 위해 다음과 같은 기능들을 제공합니다.

  • 암호화
  • 메시지 다이제스트(Message Digest)
  • 디지털 증명서

암호화는 전송하는 데이터를 암호화해서 중간에 누군가가 패킷을 가로채더라도 그 안의 내용을 해석하지 못하도록 하는 기능입니다.

메시지 다이제스트는 메시지(데이터)의 해시값(다이제스트 값)을 계산하여 데이터와 함께 전송하는 방법입니다. 중간에 누군가가 패킷을 변조하더라도 다이제스트 값을 확인하면 데이터의 변조 사실을 확인할 수 있습니다. 데이터의 무결성을 보장해주는 방법입니다.

디지털 증명서는 서버가 신뢰할 수 있는 서버인지 증명하는 파일입니다. 중간에 누군가가 접속 경로를 바꾸어 가짜 서버에 접속했을 때 확인할 수 있도록 하는 기능입니다.


SSL 서버

SSL은 디지털 증명서를 이용해서 해당 서버가 신뢰할 수 있는 서버인지 아닌지 확인합니다. 즉, SSL 서버에는 디지털 증명서를 설치해야하는 작업이 필요합니다.

증명서를 설치하는 절차는 다음과 같습니다.

  1. 서버 관리자는 비밀키와 공개키를 생성한 후 공개키를 CSR(Certificate Signing Request)이라는 증명서 서명 요청 형태로, 제 3의 기관인 CA(Certification authority)에 제출합니다. 공개키는 제출하고, 비밀키는 별도로 보관합니다.

  2. CA에서는 여신 판단을 한 다음 CSR에 ‘신뢰할 수 있습니다’라는 디지털 서명을 합니다. 그 이후 ‘디지털 증명서’를 서버 관리자에게 발행합니다.

  3. 서버 관리자는 디지털 증명서를 서버에 설치합니다.


SSL 암호화의 흐름

서버에 디지털 증명서를 설치하고 나면, 이제 SSL 서버로 동작을 할 수 있습니다.

  1. 서버는 클라이언트가 접속하면, 클라이언트에게 공개키와 디지털 증명서를 전송합니다.

  2. 클라이언트는 디지털 증명서내의 디지털 서명을 보고 증명서의 유효성을 체크합니다. 유효한 증명서임이 확인되면 공통키의 파라메터를 서버에서 보내온 공개키로 암호화한다음 서버에 전송합니다..

  3. 서버는 클라이언트로부터 받은 데이터를 비밀키를 이용해 복호화한다음 공통키의 파라메터를 확인합니다. 여기까지의 작업을 ‘SSL 핸드쉐이크(SSL Handshake)’라고 합니다.

  4. 클라이언트와 서버는 공통키의 파라메터로부터 공통키를 만들고 그 이후부터는 공통키를 이용해서 암호화 통신을 수행합니다.