본문으로 바로가기

 

[HTTPS?]

이번 글에서는 HTTPS를 적용해 보겠습니다. 왜 HTTP가 아닌 HTTPS가 필요한 걸까요?

HTTPS가 아닌 HTTP는 암호화되지 않은 프로토콜로 데이터가 암호화가 되어있지 않은 채로 네트워크를 통해 송수신합니다. 혹시나 제 3자가 가로채는 공격이 일어나면 민감한 정보가 그대로 노출되고 메시지가 위변조 될 수 있습니다. HTTP의 보안 버전인 HTTPS는 SSL/TLS를 사용하여 데이터를 암호화하고 보안 연결을 할 수 있게 합니다. 또한, 웹 사이트에서 HTTPS를 사용하려면 CA(인증 기관)에서 인증서(파일 유형)를 가져와야 합니다. 우리는 Let’s Encrypt를 이용하여 인증서를 가져와서 HTTPS를 적용해보겠습니다. 이제 Let’s Encrypt가 뭔지 알아봅시다.

 

 

[Let’s Encrypt?]

Let’s Encrypt는 글로벌 공인인증기관(Certificate Authority, CA)입니다. 전 세계 사람과 조직들이 SSL/TLS 인증서를 확득하고, 갱신하고, 관리할 수 있도록 합니다. 인증서는 안전한 HTTPS 연결을 도와주는 데도 이용될 수 있습니다.

 

- 무료

인증서 이용은 무료입니다. Let’s Encrypt는 비영리이며, 임무는 HTTPS를 널리 채택케 하여 더욱 안전하고 사생활이 보호되는 웹을 만드는 것입니다. 서비스는 무료이며 모든 웹 사이트가 HTTPS를 배포하기도 쉽습니다. [경우에 따라, 통합 서비스 제공자(예:호스팅 공급자)는 Let’s Encrypt 인증서를 제공하는데 발생하는데 계상된 행정 관리 비용만을 반영하는 방식으로 명목상 비용만을 부담할 수 있습니다.]

 

- 유효기간

인증서는 90일 동안 유효합니다.

왜 이렇게 짧을까요? 바로 두 가지의 주요 이점 때문입니다.

  1. 키 손상 및 잘못된 발급으로 인한 피해를 제한합니다. 도난당한 키와 잘못 발급된 인증서의 유효 기간은 더 짧습니다.
  2. 그들은 사용 편의성을 위해 절대적으로 필수적인 자동화를 장려합니다. 전체 웹을 HTTPS로 이동하려는 경우 시스템 관리자가 수동으로 갱신을 처리할 것이라고 계속해서 기대할 수는 없습니다. 발급 및 갱신이 자동화되면 수명이 짧아도 수명이 길어지는 것보다 편리하지 않습니다.

이러한 이유로 우리는 수명이 90일보다 긴 인증서를 제공하지 않습니다. 

60일마다 인증서를 자동으로 갱신하는 것이 좋습니다.

 

 

[인증서 갱신 방법]

인증서 만료일이 얼마나 남았는지 확인하는 방법입니다.

sudo certbot certificates

 

위의 명령어를 입력하시면 Expiry Date에 만료일이 나와있습니다. 저는 인증서 만료까지 8일이 남아있다고 하네요. (제 도메인과 ip는 보안을 위해 가렸습니다. 좀 지저분하네요...참고 부탁드립니다.)

 

인증서 갱신 방법은 간단합니다. 아래 명령어를 입력해주시면 됩니다.

sudo certbot renew

 

등록이 완료된 것을 확인하실 수 있습니다.

 

혹시라도 아래의 에러가 발생하셨다면, 

Could not bind TCP port 80 because it is already in use by another process on this system (such as a web server). Please stop the program in question and then try again.

80에 해당하는 포트를 중지하고 다시 시도해주시기 바랍니다. 저의 경우 nginx가 80 포트를 차지하고 있어서 nginx를 중지하고 인증서를 갱신하니 이상없이 잘 되었습니다.

sudo service nginx stop
sudo certbot renew
sudo service nginx restart

 

 

[인증서 자동갱신]

3개월마다 일일이 갱신할 수 없으니 linux의 crontab 명령어를 이용하여 자동으로 갱신하는 방법도 있습니다.

sudo vi /etc/crontab

 

위의 사진처럼 맨 아랫줄에 아래의 코드를 넣어주시면 됩니다.

15 3 * * * root certbot renew --quiet --renew-hook "/etc/init.d/nginx reload"

 

 

 

References

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

https://certbot.eff.org/