티스토리 뷰

HTTPS란 무엇인가? 왜 해야 하나?

HTTPS (Hypertext Transfer Protocol over Secure Socket Layer) 는 HTTP 프로토콜에서 보안의 개념이 추가된 프로토콜입니다. 인증/암호화 프로토콜인 SSL/TLS을 사용해서 세션 데이터를 암호화합니다. HTTPS 사이트가 꾸준히 증가하고 있는 이유는 장려하고 있기 때문이기도 하고

크로미움 개발 팀이 향후 공개될 크롬 62 버전부터는 HTTP로 사이트에 접속했을 때 시크릿 모드에서는 항상 "안전하지 않음"으로 표시하고 일반 모드와 시크릿 모드 모두 데이터를 입력하려 할 때 "안전하지 않음"을 띄우겠다고 발표했습니다.

이미지나 영상, 자바스크립트 코드 등 외부 리소스들을 비암호화 연결로 보안 이슈가 생기는 등의 과거에 비해 HTTPS를 사용함으로써 제약을 받을 수 있었던 문제가 많이 해결되었기 때문입니다.

또 한가지 HTTS 인증서를 구매하고 갱신해야하는 비용에 대한 문제가 있었는데 ISRG (Internet Security Research Group)에서 Let's Encrypt라는 무료 인증서 기관을 만든 것이 HTTPS 사이트 증가에 많은 공헌을 했습니다.

그러니 HTTPS를 도입하지 않을 이유는 거의 없어졌지만 아직도 HTTPS에서 접근하기 어려운 이슈들이 존재하기 때문에 도입하기전 어떤 이슈가 있을 지 고민해봐야 합니다.

Let's Encrypt

HTTPS를 웹 사이트에 적용하기 위해 CA (Certificate Authority)에서 인증서를 받아야 합니다. Let's Encrypt는 CA중 하나입니다. ACME 프로토콜을 사용하는 소프트웨어를 사용할 수 있다고 하는데요. ACME 프로토콜은 간단히 말해서 나의 웹서버와 CA 사이 인터렉션을 자동화하는 통신 프로토콜 입니다. 즉, 공개키 배포를 자동화할 수 있고 Let's Encrypt를 위해 ISRG에서 디자인 했습니다.

이제 시작을 할텐데 먼저 우리의 호스트에 SSH 접근이 가능한지 알 필요가 있습니다. 만약 호스트를 컨트롤 패널 (cPanel, Plesk, Wordpress 같은)로 관리하고 있으면 쉘로 접근하지 않고 호스팅 제공자가 지원하는 방법에 따라야 합니다.

SSH 접근이 가능한 경우

Certbot ACME 클라이언트를 사용할 것을 추천하고 있습니다. 이 클라이언트를 사용하면 인증 보안 및 설치를 자동화할 수 있습니다. 물론 자동 설정을 원하지 않는 사용자를 위한 전문가 모드도 있다고 합니다. 많은 운영체제에서 사용하기 쉽고 문서도 잘 되어 있습니다.

SSH를 사용하지 않고

쉘 접근 없이 Let's Encrypt를 사용하는 가장 좋은 방법은 호스팅 제공자의 빌트인 지원을 받는 것입니다. 만약 Let's Encrypt 지원을 하면 인증서를 요청하고 설치 및 자동 업데이트 할 수 있습니다. 만약 호스팅 제공자가 제공하지 않는다면 요청 지원을 위해 연락을 취해야 합니다.

Certbot

cerbot 설치법은 여기에 자세히 나와 있습니다. 저의 경우 우분투 16.04버전에 nginx 서버를 사용하기 때문에 그 설정에 맞게 설치를 했고, 우분투 외에도 다양한 OS에서 다양한 웹서버 (Apache, Plesk, Haproxy 등)에 맞춰 설치 방법을 지원하고 있기 때문에 각자 환경에 맞춰서 설치법을 따라하시면 될 것 같습니다.

다음과 같이 Nginx 플러그인을 실행시키면 인증서를 자동으로 가져오고 설치해 줍니다.

sudo certbot --nginx

위 명령은 인증서를 가져오고 Nginx 설정을 자동으로 편집합니다. 스스로 설정을 변경하고 싶으면 뒤에 certonly 명령을 넣으면 됩니다.

[추가] 리뉴얼 하기

기본적으로 90일을 기준으로 인증서 재발급을 받으라고 권장합니다. 90일이 지나기 20일 전쯤 이런 메일을 받는데

Hello,

Your certificate (or certificates) for the names listed below will expire in19 days (on 11 Jan 18 03:53 +0000). Please make sure to renewyour certificate before then, or visitors to your website will encounter errors.

...

해당 서버로 ssh 접속을 해서 다음과 같이 입력하면

sudo certbot renew --dry-run //재발급 테스트
sudo certbot renew //재발급

Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/<도메인 이름>/fullchain.pem (success)** DRY RUN: simulating 'certbot renew' close to cert expiry** (The test certificates above have not been saved.)

일련의 과정을 거친뒤 리뉴얼되었다고 뜹니다.


HTTPS는 속도가 느리다는 이슈에 대해 그렇지 않다는 것을 잘 설명한 블로그 글을 첨부합니다.https://tech.ssut.me/2017/05/07/https-is-faster-than-http/

[2018.06.13 추가] Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA 이슈오랜만에 새로운 도메인의 HTTPS를 설정하러 들어갔더니 설정은 되지 않고 다음과 같은 에러가 떴다. 찾아보니 cerbot 이 예전 버전이라 보안상의 이슈로 막아뒀나보다. 해결은 다음과 같이
sudo certbot --authenticator standalone --installer nginx -d example.com --pre-hook “service nginx stop” --post-hook “service nginx start”
certbot의 인증 옵션을 standalone으로 설정해주면 된다. nginx는 각자의 웹서버로 바꿔주고 설정하려는 도메인을 쓰고 프리훅과 포스트훅으로 웹서버를 껐다가 다시 실행해주면 해결.
참고자료

https://letsencrypt.org/getting-started/

https://certbot.eff.org/#ubuntuxenial-nginx
2018.06.13 이슈 https://community.letsencrypt.org/t/solution-client-with-the-currently-selected-authenticator-does-not-support-any-combination-of-challenges-that-will-satisfy-the-ca/49983

댓글