사이트 운영을 기존 일반 호스팅(shared hosting)에서 VPS라고 불리우는 가상호스팅으로 옮기고나서 보안에 대해서 신경을 써야함으로 보안을 강화할 방안을 고민하였습니다.
처음에는 CloudFlare를 적용하면 보안도 좋아지고 속도도 좋아진다는 이야기가 있어서 이의 적용을 심각하게 고민했고, 실제로도 CloudFlare를 적용했습니다.
당시 제가 알았던 정보는 free plan으로 CloudFlare를 적용시 하면
- 트래픽 분산이 가능하다
- 회선 가속
- DDOS 방어가 가능
지금 다시 확인해보니 잘못된 정보네요. CloudFlare은 business plan에서만 DDOS 방어를 지원해주고 있습니다.
그런데 CloudFlare를 적용하니 서버단에서 대기시간이 너무 길어집니다. 무려 2초가까이 나오더군요.
그러다 hackYa님이 쓰신 클라우드플레어 (CloudFlare) 를 쓰지 말아야 하는이유라는 글을 읽고 최종적으로 CloudFlare를 접었습니다.
그래서 대안(대안이 되는지는 모르겠습니다만)으로 무료로 발급해주는 SSL 인증서를 기반으로 서버 보안을 강화해 보자는 생각을 했습니다.
한번 이쪽으로 방향을 틀게되니 이것 저것 신경쓸게 너무 많네요.. 자꾸 어려운 세계로 들어가는 것 같아서 마음이 불편하긴 합니다.
일반인이 하기에는 시간이 너무 부족하고 지식도 너무 부족하고 그냥 전문가에 맡기는게 최선일지도 모르겠습니다.
1. 웹보안 관련해 몇가지 개념 정리
이와 시작했으니 웹보안 관련 몇가지 필수 개몀 정리를 해보겠습니다.
자세한 개념잡기는 생활코딩님이 정리한 HTTPS와 SSL 인증서라는 글을 참조하면 많은 도움이 될것 같습니다.
그리고 가진곰님이 Xpress Engine 공홈에 올린 SSL의 정석 (아파치 & nginx) 라는 글이 이 족 분야를 이해하는데 도움이 될 것 같네요.
1.1. HHTP와 HTTPS의 차이
일반적으로 인터넷은 HTTP(Hypertext Transfer Protocol의 약자)로 데이타를 전송해왔습니다. 이는 암호화되지 않은 방식으로 데이타를 전송하므로 메세지를 감청하는것이 매우 쉬워 보안에는 취약합니다. 로그인을 위해 비밀번호를 전송시 쉽게 비밀번호를 가로챌 수 있다는 의미이죠.
그래서 보다 보안을 강화한 방식이 HTTPS입니다. 마지막의 S는 Over Secure Socket Layer의 약자로 보안이 강화된 HTTP라고 이해하면 될 것 같습니다.
1.2. SSL이란
SSL protocol은 Secure Socket Layer protocol의 약자로 (지금은 사라진 브라우져회사인)Netscape사에서 처음으로 웹서버와 브라우저 사이의 보안을 위해 만들었다고 합니다. .
SSL 작동방식에 대해서 SSL Certificates HOW TO라는 글에서 아래와 같이 정리해 주고 있습니다.
- [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)
- [웹서버] Public Key를 인증서와 함께 전송한다.
- [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.
- [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다.
- [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.
- [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.
- [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.
1.3. SSL인증서란
SSL 인증서는 보안이 강화된 HTTPS 프로토콜로 서버와 클라이언트간 통신을 제3자가 보증해주는 전자화된 문서입니다.
위 SSL작동방식에서 설명한 것처럼 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서 정보를 전달하며 클라이언트는 이 인증서 정보가 신뢰할 수 있는 것인지를 검증 한 후에 자료 전송 등등의 작업을 진행합니다.
이 SSL 인증서을 사용하면 서버와 클라인언트간 통신 내용이 공격자에게 노출되는 것을 막을 수 있고, 클라이언트가 접속하려는 서버가 신뢰 할 수 있는 서버인지를 판단할 수 있으며 공격자에 의해서 서버와 크라인언트간 통신 내용의 악의적인 변경을 방지할 수 있다고 합니다.
2. 웹보안의 강제적 적용과 구글의 정책
위에서 설명한것처럼 웹에서 보안을 위해서는 HTTPS 적용이 기본적으로 필요합니다.
이런 저런 이유로 우리나라는 2012년 8월 18일부터 시행된 정보통신망 이용촉진 및 정보보호 등에 관한 법률에 따라 개인정보호를 위해서 보안서버(SSL)를 구축해야합니다. 개인사이트, 커뮤니티를 포함해 회원가입을 받는 국내 모든 웹사이트가 해당된다는 해석입니다.
(이에 대해서 불필요한 규제라는 많은 불만이 있는 것은 사실입니다.)
제28조(개인정보의 보호조치)
① 정보통신서비스 제공자등이 개인정보를 취급할 때에는 개인정보의 분실·도난·누출·변조 또는 훼손을 방지하기 위하여 대통령령으로 정하는 기준에 따라 다음 각 호의 기술적·관리적 조치를 하여야 한다.
- 개인정보를 안전하게 취급하기 위한 내부관리계획의 수립·시행
- 개인정보에 대한 불법적인 접근을 차단하기 위한 침입차단시스템 등 접근 통제장치의 설치·운영
- 접속기록의 위조·변조 방지를 위한 조치
- 개인정보를 안전하게 저장·전송할 수 있는 암호화기술 등을 이용한 보안조치
- 백신 소프트웨어의 설치·운영 등 컴퓨터바이러스에 의한 침해 방지조치
- 그 밖에 개인정보의 안전성 확보를 위하여 필요한 보호조치
② 정보통신서비스 제공자등은 이용자의 개인정보를 취급하는 자를 최소한으로 제한하여야 한다.
또한 구글에서도 2014년부터 HTTPS를 지원 여부를 사이트의 신뢰할 수 있다는 척도로 판단하고 검색 순위에서 올리겠다고 발표했습니다.
구글 Webmaster Central Blog에 발표된 HTTPS as a ranking signal 을 참조해 보시기 바랍니다.
Security is a top priority for Google. We invest a lot in making sure that our services use industry-leading security, like strong HTTPS encryption by default. That means that people using Search, Gmail and Google Drive, for example, automatically have a secure connection to Google.
~ 중략~
For these reasons, over the past few months we’ve been running tests taking into account whether sites use secure, encrypted connections as a signal in our search ranking algorithms. We've seen positive results, so we're starting to use HTTPS as a ranking signal. For now it's only a very lightweight signal — affecting fewer than 1% of global queries, and carrying less weight than other signals such as high-quality content — while we give webmasters time to switch to HTTPS. But over time, we may decide to strengthen it, because we’d like to encourage all website owners to switch from HTTP to HTTPS to keep everyone safe on the web.
3. 무료 SSL인증서에 대해서
그러면 이처럼 보안을 강화하기위해 보안서버(SSL)를 구축하려면 SSL인증이 필요합니다.
그동안 SSL인증에는 일정정도 비용을 수반했기때문에 HTTPS 프로토콜을 적용하는 사이트가 적었지만 HTTPS 확산을 위해서 무료로 발급해주는 곳이 증가하고 잇습니다.
이러한 무료 인증서가 유료 인증서보다 보안에 약하지않을까하는 염려가 있을 수 있는데이는 전혀 걱정할 필요가 없다고 합니다.
무료인증서나 유료인증서나 인증에는 별 차이가 없습니다만 유료인증서에는 사고가나면 배상받을 수 있는 조검이 걸려있습니다. 쉽게 말해서 일종의 보험이 포함되어 비싼진 게 유료인증서라고 보면 될 것 같습니다.
이처럼 무료로 SSL인증서를 발급해주는 곳으로는 Let’s Encrypt, Wosign, StartSSL이 널리 알려져 있습니다. 아래에서 각 업체별 특징을 간략히 알아보겟습니다.
3.1. Let’s Encrypt (https://letsencrypt.org)
Let’s Encrypt은 HTTPS의 확산이 늦어지는 것은 SSL인증서에 있다고 보고 무료 인증서 보급을 통해 HTTPS의 확산을 늘리겠다는 취지로 시작된 비영리 프로젝트입니다.
Mozilla, Akamai, Cisco, eff, Identrust등이 스폰서로 참여해서 HTTPS Everywhere를 모토로 100% 무료 SSL 인증서를 발급
해주고 있습니다.
Let’s Encrypt의 정책은 독특합니다. 앞에서 HTTPS의 확산을 위한 비영리단체로 소개했듯이 Let’s Encrypt은 서버운영자들이 인증 관리를 철저히 하지 못한다는 점을 염려(?)해 인증서 설치부터 재발행(갱신)까지 다 책임진다는 자세로 인증고나련 업무를 진행하고 있습니다.
인증기간이 90일로 상대적으로 짧은 것은 보안 상황이 계속 변동되므로 이를 반영해 갱신할 수 있도록 짧게 잡았으며 대신 자동으로 인증서가 연장(재발행)되는 기능을 사용하도록 권장하고 있습니다.
자동으로 연장(재발행)된다면 오히려 안심하고 사용할 수 있는 것이 아닌가 싶습니다.
- HTTPS Everywhere 를 추구하는 비영리 프로젝트
- 스폰서 : Mozilla, Akamai, Cisco, eff, Identrust
- IdenTrust cross-sign됨
- SSL 인증서 100% 무료화
- 인증기간 연장 및인증서 재발급 무료
- 사용편리성 : 콘솔상에서 인증서 발급/갱신/설치/세팅 자동화.
- 멀티도메인 지원, SAN 기능(여러 도메인을 한 인증서로 묶어주는 기능) 지원
3.2. Wosign (https://buy.wosign.com/free/)
Wosign은 중국의 인증업체 상당히 공격적인 조건으로 사용자를 확보하고 있는 인증업체입니다.
여기서 발급하는 인증서의 브라우저 호환성은 StartSSL과 같은 수준이라고 합니다. (StartSSL cross-sign)
이곳의 장점은
- 최초 발급이 무료이고 더우기 Revoke/Reissue가 무료 임 (StarSSL은 상당 비용($25)을 받음, Let’s Encrypt는 무료임)
- 멀티도메인 지원 및 발급 도메인수가 많다. ( Wosig에서는 한 인증서당 SAN 100개까지 지원할정도로(도메인 + 서브도메인 포함해 100개) 많은 도메인을 등록할 수 있었으나 스팸성 도메인들의 증가로 도메인을 5개까지 무료 지원 + 그 이상은 도메인당 1.99달러 가격으로 이용 가능)
- 인증기간을 3년까지 선택할 수 있음
Wosign의 단점을 꼽자면
- 중국 인증업체로 신뢰성이 떨어진다는 점
- 서비스에의 의구심(뚜렸한 사유없이 인증이 취소되었다는 케이스 등등 사례가 있음)
3.3 StarSSL
StarSSL은 이스라엘 보안업체가 운영하는 인증서 발급업체로 비교적 신뢰도가 높은곳으로 알려지고 있습니다.
다만 위 Wosign이나 Let’s Encrypt에서 당연시되는 사항들이 여기에서는 무료로 지원되지 않고 있습니다.
- 계정당 인증서 1개만 가능
- 인증서 연장은 무료지만 유효기간이 지나 재발급받을 시 상당한 비용을 받습니다. (25$ of Revoke fee)
3. 어떤 무료인증서를 이용해야 할까?
위에서 무료 SSL 발급업체인 Let’s Encrypt, Wosign, StartSSL의 간략한 특징을 살펴보았는데요.
그러면 이중 어디를 써야할까요?
아마 관리가 귀찮은 분들은 인증기가닝 가장 긴 Wosign의 3년짜리를 쓴 것이 답이 아닐까도 싶구요.
보다 믿을 수 있는 곳을 서야겠어하시는 분은 그래고 권위(?)있는 StarSSL을 쓰시는게 마음 편할 듯 합니다.
저는 여러 조건을 고려해 볼 시 자동으로 연장되는 기능을 사용하는 조건으로 Let’s Encrypt가 가장 경쟁력있다고 판단되었습니다.
원래는 SrarSSL을 사용하려고 인증서까지 받고 서버에 설치하는 중이었는데요. Let’s Encrypt로 바꿔보기로 했습니다.
다음 포스팅에는 Let’s Encrypt 인증서를 적용하고 자동 연장토록 구성하는 방법에 대해서 알아보도록 하겠습니다.