2017년 2월 14일 화요일

HTTPS로​ 업그레이드하기​

크롬이 ​최근 업데이트에서 예고한 대로 HTTP 페이지에 암호 입력 폼이 있을 경우 안전하지 않다는 경고를 주소창 앞쪽에 붙이고 있습니다.


우리나라에서는 알고 있었는지 모르고 있었는지 모르지만 크롬 업데이트 (한국의 크롬 브라우저 점유율은 많이 높아져서 ​50% 정도 라고 합니다) 이후 주로 네이버 홈 페이지를 중심으로 기사화가 되고 있습니다.


한겨레 기사를 바탕으로 한 아래와 같은 반론 글도 접할 수 있고요.


HTTPS 로 업그레이드하기

국내에는 주로 웹사이트를 HTTP로 제작하고 HTTPS의 경우 비용이나 성능 등의 문제를 들어 꼭 필요한 부분 (로그인, 결제 등)만 HTTPS 처리를 하는 것이 일반적인데 비해, 주로 영미권에서는 도청이나 검열 문제를 들어 사이트 전체를 HTTPS화하는 움직임이 이미 몇년전부터 있어 왔고, 크롬의 업데이트도 그런 이동을 가속화하고자 하는 취지가 아닌가 합니다.

성능 저하에 대한 우려


SSL/TLS의 성능 문제에 대해서는 아래 사이트에서 많은 내용을 찾아볼 수 있습니다.


현재로서는 적당히 좋은 하드웨어를 사용하는 경우 SSL화로 인한 CPU 부하는 1%, 네트워크에 추가로 전송되는 데이터는 2% 정도라고 합니다. 서버 하드웨어의 경우 CPU에서 지원하는 하드웨어 가속 기능 등을 충분히 활용할 경우라 볼 수 있겠습니다.

따라서 성능의 경우 현재는 많은 부분이 선입견이라 할 수 있고, 실제 문제는 다음과 같은 점에 있지 않을까 합니다.

  • 신규로 TLS를 설정하는 번거로움
  • 인증서 구매 및 정기적으로 업데이트하는 번거로움

각각의 경우에 대해서 요즘 많이 이용되는 방법을 알아보도록 하겠습니다.​

신규로 TLS를 설정하는 번거로움

신규 TLS 설정은, 일단 웹서버에 TLS 기능을 넣는 것부터 시작해서, 웹사이트가 100% TLS에서 잘 동작 하는지, HTTP 로 접속하는 경우 자동적으로 HTTPS로 리다이렉트가 되는지, 주된 사용자 계층에서 접속에 문제가 없는지 확인하는 등등의 작업이 포함 됩니다.

TLS 의 최근 이슈는 주로 보안 관련인데, OpenSSL을 사용하는 경우 업데이트가 최신 버전까지 되어 있는지 확인 하고, 설정 후에 꼭 ssllabs 를 이용해서 사이트의 TLS 보안 수준을 확인 하는 것이 좋습니다. A+ 로 만드는 것이 최종 목표이지만 이용자 환경에 따라 그렇지 못한 경우가 있다는 점도 주의해야 할 것입니다.


테스트 할 사이트는 인터넷 접속이 가능해야 하며, 공개 기록을 남기지 않으려면 ​Hostname 아래에 있는 체크 박스를 꼭 체크 하도록 하세요.

TLS 설정에는 여러가지 옵션이 있고 Cipher List 등, 웹 서버별 설정이 번거로운 점이 많습니다. 일단 오픈 소스 웹 서버 (nginx, lighttpd, apache 중 하나)를 사용한다면 일단 아래 사이트의 내용을 복사해서 쓰세요.

Cipherli.st Strong Ciphers for Apache, nginx and Lighttpd

위 사이트의 설정 파일을 사용한다면 대부분 문제는 없습니다만 (SSLLabs 에서 A+ 받을 수 있는 수준입니다) 반대로 오래되거나 취약한 암호 알고리즘 등을 모두 배제하고 있으므로 오래된 브라우저 (XP + IE 6 등)에서는 아예 접속이 안될 수 있습니다. 이점 유의해서 작업 하면 됩니다.

인증서 구매 및 정기적으로 업데이트하는 번거로움

사실 이게 더 문제일 수 있는게, 비용도 그렇지만 정기적으로 (보통 1년) 업데이트를 해야 하기 때문에 관련 예산이 확보되지 못한 공공기관이나 소규모 회사, 또는 별도의 웹사이트 관리자가 없는 경우 라면 인증서가 만료된 이후에도 업데이트가 제때 이루어지지 않을 수 있으므로 더 문제가 생길 수 있습니다. HTTP 로 만들어진 사이트면 서버만 돌아가고 해킹만 당하지 않으면 몇년동안 방치해도 괜찮을 수 있지만 HTTPS로 바꾸면 정기적인 인증서 관리는 필수가 됩니다.

웹사이트용 SSL인증서는 인터넷에서 쉽게 구매할 수 있지만 역시 비용이 문제가 되고, EV Multi Domain과 같이 추가 비용이 드는 경우도 있습니다.

여기에 대한 대안으로 StartSSL과 같은 ​무료 인증서 발급 기관도 있었으나 보안상 문제가 있어서 지금은 사용하지 않는 것이 좋으니, 직접 구매해서 설치하는 경우를 제외하면 다음과 같은 선택지가 있습니다.
  • 클라우드 업체에서 제공하는 인증서를 이용하기
  • CDN 업체에서 제공하는 HTTPS 서비스를 이용하기
  • Let's Encrypt 를 이용하여 직접 발급 받기

클라우드 업체에서 제공하는 인증서를 이용하기

AWS 의 경우 자체적인 인증서 발급 서비스를 이용할 수 있습니다. ELB와 CloudFront 서비스에 붙이고 웹사이트 주소를 바꾸는 방식이 되겠지요. 다만 자체 발급되는 만큼 직접 키를 다운받을 수는 없으므로 다른 서비스에 이용하거나 자체 웹사이트에 적용은 불가능합니다.

CDN 업체에서 제공하는 HTTPS 서비스를 이용하기

CDN은 웹사이트 앞단에 존재하기 때문에 오래 전부터 SSL서비스를 제공해 왔습니다. 일정 규모가 있는 CDN회사는 모두 SSL서비스를 하고 있으니, 이용하고 있는 CDN회사가 있다면 직접 문의해 보시면 SSL에 대한 해결책을 얻을 수 있을 겁니다. 보통은 다음 3가지 중 전부 내지 일부를 제공할 것입니다.
  • 와일드카드 인증서에 고객 도메인 추가. 가격은 저렴하고 직접 인증서를 발급받을 필요는 없지만, 인증서 내용에 자신의 것이 아닌 도메인도 잔뜩 포함되어 있을 수 있습니다
  • 직접 보유한 인증서 업로드 또는 제휴된 인증서 회사를 통한 발급 후 인증서 업로드​
무료로 HTTPS 서비스를 받으려면 현재로서는 CloudFlare 가 ​제일 좋은 해결책입니다. 무료 플랜에서도 SSL지원이 되므로 개인 웹사이트 등을 손쉽게 전환이 됩니다. HTTP 웹사이트를 이미 갖고 있다면, CF에 가입해서 SSL 서비스를 활성화 하고 DNS를 전환하는 작업이 필요하게 됩니다.
CF는 와일드카드 인증서를 쓰고 있으므로 ​인증서 조회하면 인접한 도메인도 보이게 될 것이고, 키를 다운받을 수는 없습니다.

Let's Encrypt 를 이용하여 직접 발급 받기

개인 웹사이트라면 ​Let's Encrypt 를 통해서 무료로 인증서를 발급받을 수 있습니다.


웹사이트에 파일을 직접 올릴 수 있는 권한 정도만 있으면 인증서를 발급받을 수 있습니다만, 3개월 후 만료되는 짧은 인증서를 발급해 주므로 3개월마다 갱신하는 일이 필요 합니다. 이는 certbot 을 이용해서 자동화할 수 있으므로, 홈페이지가 있는 서버에 프로그램을 설치할 수 있다면 주기적으로 업데이트하는 것 만으로 인증서 관리가 쉬워 집니다. 

아래 사이트에 접속해서 운영체제와 사용하는 웹 서버를 선택하면 인증서 발급 방법이 안내 됩니다.



끝으로


HTTP 사이트를 HTTPS 화 하는 몇가지 최근 방법을 살펴 보았습니다. 시대는 흘러 흘러 이미 HTTP/2 로 가고 있는데, HTTP/2 에서는 TLS가 필수 이므로, 일단 사이트를 HTTPS 전용으로 만들 수 있다면 HTTP/2는 웹 서버 소프트웨어 업그레이드 정도만 남겨 놓았다고 보면 됩니다. 시간이 되면 그 부분에 대해서도 별도로 글을 작성 하도록 하겠습니다.




















댓글 쓰기