Cloudflare라는, CDN 및 DNS 서비스를 무료로 제공하는 미국의 한 업체가 있다. 이 둘을 기본적으로 연계시켜 사용하는데, CDN 기능이 설정된 상태에서 방문자가 사이트에 방문하면 Cloudflare의 DNS 서버는 방문자를 사이트가 위치한 서버가 아닌 Cloudflare CDN 서버로 연결시키고, 이 서버에서 사이트가 위치한 실제 서버와 통신해 얻은 결과를 다시 방문자에게 보여준다. 방문자는 이중 통신을 하는 셈이다.

이 과정에서 사이트가 위치한 실제 서버, 즉 ‘원격지 서버’의 IP를 보여주지 않기 때문에 무료로 사용할 경우 속도가 조금 느리다는 점을 감안하고서라도 CDN 서비스를 DDoS 공격 방지 등의 목적으로 쓰는 경우도, 아예 매달 큰 돈을 지불하면서 빠른 속도를 보장받는 경우도 종종 있다.

이 CDN 서비스 기능 중의 하나가 여기서 설명하고 대차게 깔 Flexible SSL이다. 쉽게 설명하자면 보안 연결이 안 된 사이트에도 보안 연결을 사용해 접속할 수 있도록 하는 것인데, 아래의 그림을 보자.

Cloudflare CDN SSL 서비스의 작동 구조

이 SSL 서비스는 크게 3단계로 나뉜다. 원격지 서버에서 보안 연결을 지원하지 않아도 보안 연결이 가능한 Flexible SSL, 원격지 서버에도 인증서를 사용1해 보안 연결을 구축해야 사용할 수 있는 Full SSL, ‘유효한’ 인증서를 통해 구축해야 사용2할 수 있는 Strict Full SSL. Flexible SSL은 앞서 설명한 그 특성 상 Cloudflare의 CDN 서버와 방문자의 통신만을 암호화해 방문자에게 전송하고, CDN 서버와 원격지 서버와의 통신은 암호화를 하지 않고 진행한다. 이것이 가장 큰 문제점이다.

아무리 Cloudflare에서 원격지 서버에서 받아온 데이터를 암호화해 방문자에게 전달한다고 해도, 그 데이터가 암호화되지 않은 원격지 서버에서 조작된 상태로 받아온 것이라면 전혀 소용이 없다. 방문자는 분명히 보안 연결을 사용하고 있음에도 조작된 데이터를 받게 되는 것이다.

Flexible SSL은 또한 방문자를 문자 그대로 가지고 노는 기능이라고도 할 수 있다. Flexible SSL을 사용하지 않는다면 모든 통신이 암호화되지 않은 상태로 수립된다는 것을 브라우저에서 경고해준다. 따라서 약간의 상식이 있는 방문자라면 이 통신에 나의 민감한 데이터를 포함시켜도 되는지 결정할 수 있다. 하지만 Flexible SSL을 사용할 경우 이 통신이 암호화가 되지 않았는지를 확인할 수 없기 때문에 방문자는 의심 없이 통신에 민감한 데이터를 포함시킬 것이다. 이는 즉각적인 데이터 유출의 위험에 놓이게 됨을 뜻한다.

Cloudflare의 CDN 서비스를 사용하면서 서버에 보안 연결을 추가해야 한다면 이렇게 안 하느니만 못 한 Flexible SSL 대신 무료 인증서라도 발급해 Strict Full SSL3 기능을 사용하여 방문자에게 이 보안 연결은 신뢰할 수 있음을 확실히 나타내야 한다. 그래야 방문자가 이 통신을 신뢰하고 이곳에 계속 방문할지 말지를 선택할 때 중요한 요소로 작용할 수 있기 때문이다.


  1. 이 경우 Self-signed Certificate를 사용해도 보안 연결 자체는 수립이 가능하기 때문에 상관이 없다. ↩
  2. 이 경우에서 Self-signed Certificate는 유효하지 않은 인증서이기 때문에 사용이 불가능하다. ↩
  3. Full SSL은 유효하지 않은 인증서도 받아들이기 때문에 보안 면에서는 Flexible SSL만큼은 아니지만 좋지 않은 선택이다. ↩