binary01.me

  • about
Copyright 2026 Jinsoo Lee
letsencrypt를 활용해 블로그에 https 적용하기!

letsencrypt를 활용해 블로그에 https 적용하기!

이번 포스팅에서는 letsencrypt를 활용하여 http를 https로 전환하는 방법을 이야기하겠다!

letsencrypt

#

HTTP는 하이퍼 텍스트를 전송하는 프로토콜이다.

쉽게 말해, 여러분이 접속하고 싶은 사이트의 서버에서 여러분의 브라우저로 정보를 전송하는 규약이다.

현재 웹 사이트의 모두가 HTTP를 사용한다고 할 수 있을 만큼 대중적이다.

하지만 이 HTTP의 치명적인 단점이 있는데, 서버에서 브라우저로 데이터를 전송할 때 데이터가 암호화가 되지 않는 것이다.

전송 시 데이터를 암호화하기 위해서는 HTTPS(S = Secure)라는 프로토콜을 사용하면 되는데, 오늘날 유명한 사이트들의 주소를 보면 모두 적용되어 있는 https://를 내 블로그 사이트에도 적용해보자!

HTTPS를 적용하기 위해선 유명하고 신뢰할 수 있는 기관에서 발급한 인증서(binary01.me는 안전한 사이트입니다!라는 인증)가 필요하다.

몇 년까지만 해도 HTTPS를 적용하기 위해선 비용을 내고 인증서를 받아야 했는데, 최근에는 무료로 SSL 인증서를 발급해주는 letsencrypt를 많이 사용하는 것 같다.

Notion image

환경 : Ubuntu 16.04

웹 서버 : http-server(npm)

letsencrypt를 활용하여 HTTPS를 적용하는 과정은 아래와 같이 크게 4가지로 나눌 수 있다.

  1. HTTPS 적용에 필요한 package 설치
  2. SSL 인증서 발급
  3. HTTPS 적용
  4. 자동 갱신 설정

HTTPS 적용에 필요한 package 설치

#
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install cron
$ sudo apt-get install -y letsencrypt

SSL 인증서 발급

#

letsencrypt에서는 인증서를 3가지 방법을 통해 발급할 수 있다.

  1. webroot - 호스팅 될 폴더 내부에 인증서가 유효한지 확인할 수 있는 파일을 업로드하여 사이트 유효성을 확인하는 방식
  2. Standalone - 해당 사이트의 네크워킹을 이용해 사이트 유효성을 확인하는 방식
  3. DNS - Domain을 쿼리하여 얻은 TXT Record로 사이트 유효성을 확인하는 방식

위 방식 중 오늘은 1번 webroot 방식으로 진행해볼 것이다.

아래 커맨드로 인증서를 발급받아보자!

$ letsencrypt certonly --webroot --webroot-path=/home/user_name/binary01.me/public -d binary01.me -d www.binary01.me
  • 방식 : –webroot
  • 호스팅할 폴더 경로 : –webroot-path
  • 도메인 : -d

알맞게 적은 후, Enter를 누르자!

아래와 같이 무사히 인증서가 발급되었다는 문구가 출력될 것이다.

Notion image

HTTPS 적용

#

대부분이 대표적인 Web/WAS Server(Nginx, Apache)로 호스팅하겠지만, 나의 경우는 npm http-server를 사용하였다.

(다른 웹서버로 호스팅하시는 분들은 참고만 해주세요!)

$ http-server public/ -p 443 -S -C /etc/letsencrypt/live/binary01.me/cert.pem -K /etc/letsencrypt/live/binary01.me/privkey.pem

public은 react를 build하여 얻은 결과로 호스팅할 폴더(상대경로)이다.

호스팅할 폴더 이름이 public과 다르다면 그 폴더 이름을 넣자.

HTTP의 포트는 80번, HTTPS의 포트는 443번이다.

별도의 설정을 해주지 않으면 80번 포트로 들어온 HTTP 요청을 443번 포트(HTTPS)로 Redirect할 수 없다.

다른 웹 서버를 사용한다면 간단히 설정할 수 있지만, 나의 경우에는 Nodejs로 HTTP로 들어온 요청을 HTTPS Redirect해주는 간단한 서버를 만들어 띄웠다.

Redirect 용 서버 app.js

const express = require("express");
const app = express();
const port = 80;

app.all("*", (req, res) => {
  let protocol = req.headers["x-forwarded-proto"] || req.protocol;

  if (protocol == "http") {
    let from = `${protocol}://${req.hostname}${req.url}`;
    let to = `https://${req.hostname}${req.url}`;
    //redirect
    res.redirect(to);
  }
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

그 결과, Redirect도 정상적으로 작동하고 마침내 자물쇠를 얻었다!😁😁

Notion image

자동 갱신 설정

#

letsencrypt의 인증서의 유효 기간은 90일이다. 다행히 Certbot이라는 인증서를 갱신해주는 봇 소프트웨어로 만료 전 갱신이 가능하다.

$ certbot renew

위 커맨드 한 줄로 기간 연장 끝!

하지만, 90일에 한 번씩 잊지 않고 서버에 접속해서 저런 간단한 커맨드를 날릴 필요가 있을까..?

작업이 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 도와주는 Crontab를 활용해서 서버가 자동으로 커맨드를 실행하게 해보자!

Notion image

위 사진이 Crontab의 문법이다. 참고하여 원하는 주기로 커맨드 / 프로그램 등을 실행할 수 있다.

나의 경우는 Crontab를 아래와 같이 작성하였다.

$ crontab -e # crontab 편집기 열기
0 5 1 * * cerbot renew # 매월 1일 5:00 마다 cerbot renew 커맨드 실행!
5 5 1 * * /home/binary/binary01.me/ yarn deploy # 혹시 문제가 생길 수 있으니 인증서가 갱신된 5분 후 재배포~

마무리

#

사실 letsencrypt로 http를 https로 전환은 반년도 전에 했지만.. 미루다 미루다 보니 이제 썻다…😥😥

작성을 하면서도 기억이 하나도 안 나서 처음 하는 느낌이었다..😅😅

이제는 최소한 스크린샷이나 짧게라도 관련 내용 메모를 해야겠다! 안뇽 ~~

  • letsencrypt
  • HTTPS 적용에 필요한 package 설치
  • SSL 인증서 발급
  • HTTPS 적용
  • 자동 갱신 설정
  • 마무리