Programming/Networks

Let's Encrypt란 | 암호화 통신을 위한 기술

xxxCobee 2018. 11. 23. 18:03

웹은 수없이 많은 통신의 집약체라고도 할 수 있는데, 이 통신들에 담긴 정보들은 기본적으로 스니핑에 취약하다. 스니핑은 쉽게 생각해서 누군가 정보를 중간에 탈취하는거라고 생각하면 된다. 그래서 보안상 문제없이 통신하기 위해 '암호화'라는 개념이 생겼다. 만약 누군가가 스니핑을 통해 정보를 탈취했다 하더라도, 모든 정보는 암호화 되어있어 결국 정보노출을 막는다.

그럼 어떻게 암호화 하는가? SSL이라는 인증서를 사용한다. 이것은 클라이언트와 서버가 통신할 때 믿을 수 있는 제3자가 그것을 보증해주는 문서다. 보통은 이 인증서를 유료로 구매하기 때문에 많은 사용자들이 보안의 치명적인 문제가 있음에도 불구하고 그냥 사용했지만, 유료를 참지못한 착한분들이 Let's Encrypt를 만들었다. (근데 웃긴게 이게 또 완전 무료라고는 할 수 없다. 글로벌 인증을 받으려면 1년에 2~40만원 정도 지불해야 한다나...)

Let's Encrypt는 모든 웹사이트를 HTTPS로 만들자는 슬로건을 가지고 만들어진 오픈소스 프로젝트인데, 무료로 누구에게나 SSL 인증서를 발급해준다. HTTPS는 세션에서 주고받는 데이터를 암호화한, SSL이 적용된 HTTP 프로토콜이다. 어쨌든, 인증서는 최대 90일이라는 유효기간이 있어서 '크론탭'이라는 기능을 이용해 한 달 주기로 갱신되게끔 자동화 해주는 것이 보편적이다. 서버 세팅 시, let's encrypt SSL을 여러번 반복해서 다운받아야 할 경우가 생길 수 있는데, 이 인증서는 일정기간 내에서 총 5회 발급 가능하게끔 제한되어 있으니 주의해야 한다.

Let's encrypt SSL을 인증받는 방식은 두가지가 있다.

> standalone: 서버 자체에서 인증을 시도하는 방식

장점: 수 많은 도메인을 한꺼번에 인증 받을 수 있게 설정할 수 있다.(예를 들어, abc.com, def.com, ghi.com ....계속 가능)

단점: 갱신 시, 웹서버를 중단해야 하고, let's encrypt가 서버내에서 작업하기에 민감할 수 있다.

> webroot: 외부 웹에서 사이트에 접속해 문제가 없는지를 인증해주는 방식

장점: 갱신 시, 계속 서버가 작동하면서 갱신 가능하다. 그리고 외부 웹에서 작업하여 인증하므로 서버 정보 노출 가능성이 적다.

단점: 여러개의 도메인을 한 서버에서 등록시키기 어렵다. 한가지 도메인만을 적용해야 안정적이다.