복사되었습니다.

Certbot과 docker로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법

Cover Image for Certbot과 docker로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법

Let's Encrypt를 사용하면 명령어 몇 줄로 무료 SSL 인증서를 쉽게 받을 수 있다. 게다가 ZeroSSL과 달리 무료 인증서 최대 개수 제한도 없다. ZeroSSL 대신 사용할 수 있는 초간단 카페24 무료 SSL 인증서 설치 방법에 대해 알아보자.

ZeroSSL은 완전 무료가 아니다

ZeroSSL에게 낚여버렸다

이전 글에서는 ZeroSSL을 통해 무료 SSL 인증서를 발급받는 방법을 알아봤다. ZeroSSL은 web UI 덕분에 간편해서 많이 사용되는 방법이긴 하지만, 사실 완전 무료는 아닌 듯 하다. 90일짜리 SSL 인증서를 발급받을 수 있는 3번의 기회를 모두 사용한 상태라면 SSL 인증서가 만료될 경우 다음과 같이 갱신이 불가능한 것으로 확인된다. (애초에 어떻게 무료 플랜으로 4개까지 발급받을 수 있었는지도 의문이다...)

zerossl limit on the number of free certificates

"Renew" 버튼을 클릭해서 인증서 갱신을 시도할 경우, 다음과 같이 마지막 단계에서 무료 플랜을 아예 선택할 수 없다.

zerossl unavailable free plan

최대 3개의 SSL 인증서를 제공하는 것이 아니라 "3번" 제공하는 것 같다. (내가 알 수 없는 이유로 4개까지 발급받아서 그럴 수도 있다...) 이미 발급을 받아둔 것이기 때문에 갱신은 될 줄 알았는데 착각이었다. 덕분에 웹 사이트에 일정 기간 동안 HTTPS로 접근할 수 없게 되는 불편함을 겪었다. 그럼 대체 "Renew" 버튼은 헷갈리게 왜 만들어 둔 것일까? ZeroSSL은 과감히 버린다!

ZeroSSL의 대체제를 찾아보자

ZeroSSL 대신 사용할 수 있는 다른 무료 SSL 인증서 발급 방법이 있을까? 다음과 같은 조건들을 만족하는 SSL 인증서 발급 방법에 대해 알아보도록 하자.

  • 무료 SSL 인증서 발급 수 제한이 걸려있지 않아야 한다.
  • ZeroSSL과 비슷하거나 조금 더 간편한 방법을 찾아야 한다.

더 간단하고 완전 무료인 방법이 있었다

Let's Encrypt의 무료 SSL 인증서 발급 수 제한

Let's Encrypt라는 방법을 사용하면 무료 SSL 인증서 최대 개수 제한 압박을 피할 수 있다. 물론 일정 기간 동안 같은 도메인으로 발급받을 수 있는 최대 수는 제한되어 있으나, 주당 5회 정도로 널널한 편이다. 공식 문서에서 인증서 개수 제한에 대해 다음과 같이 설명하고 있다.

리뉴얼은 특별히 취급됩니다: 리뉴얼이 등록 도메인당 인증서 수 한도에 따라 제한되지는 않지만 중복 인증서 한도는 주당 5개로 제한될 수 있습니다. 참고: 2019년 3월까지 등록 도메인당 인증서 한도에 갱신이 제한되었지만, 이제는 그렇지 않습니다.

ZeroSSL과 마찬가지로 Let's Encrypt로 받은 인증서도 기본적으로 90일 동안 유효하기 때문에 주당 5개라는 제한은 사실 없는 것이나 다름없다.

Certbot을 통해 무료 SSL 인증서 발급받기

Let's Encrypt 문서를 살펴보면 certbot이라는 도구를 사용해서 명령어 기반으로 SSL 인증서를 발급받도록 안내하고 있다. 그런데, 카페24에서 무료 SSL 인증서를 등록할 때는 특정 버전의 certbot을 사용해야 하는 듯 하다. 공식 문서의 안내대로 certbot 도구를 설치한 뒤 카페24에 인증서를 적용해보면 다음과 같은 오류를 만나게 된다.

인증서 (SSL CRT) 올바르지 않습니다. 인증서를 다시 입력해주십시오.

따라서, certbot의 버전을 지정하여 실행할 수 있도록 docker를 활용하자. 실행 환경에 docker 명령어를 사용할 준비가 되어있다고 가정하겠다. 서베이와 테스트 결과 certbot의 버전을 v1.32.2로 지정하여 발급받은 인증서가 카페24 웹 사이트에 잘 적용이 되는 것을 확인했다. 다음 명령어를 실행하면 무료 SSL 인증서 발급이 진행된다.

$ docker run -it --rm --name certbot \
  -v "${FILEPATH}:/etc/letsencrypt" \
  certbot/certbot:v1.32.2 certonly \
  --manual --preferred-challenges http \
  --email ${EMAIL} \
  -d ${DOMAIN} -d www.${DOMAIN}

명령어 중간중간 ${} 형식으로 된 부분에 적절한 값을 채워넣으면 된다. 채워넣어야 하는 값의 의미를 요약하자면 다음과 같다.

  • FILEPATH: 인증서 파일들을 다운로드할 위치
  • EMAIL: 웹 사이트 소유자의 이메일
  • DOMAIN: 웹 사이트의 도메인 주소

자신의 웹 사이트에 맞는 값들을 채워넣은 후 명령어를 실행하면 다음과 같이 안내 메시지가 출력된다. 아직 enter를 누르면 안된다. 우선 안내 메시지에서 제시하는 내용을 수행해야 한다.

$ docker run -it --rm --name certbot \
  -v "/home/littlemobs/crt:/etc/letsencrypt" \
  certbot/certbot:v1.32.2 certonly \
  --manual --preferred-challenges http \
  --email user@example.com \
  -d littlemobs.com -d www.littlemobs.com
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for littlemobs.com and www.littlemobs.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:

76KBNWL6JZHike4Rx09qoLLk8ajN27AP2M-nZG01TAA.58_4VravQGNewFtLuEwY9U_gigVOF6ubOGjqQmQPOuI

And make it available on your web server at this URL:

http://www.littlemobs.com/.well-known/acme-challenge/76KBNWL6JZHike4Rx09qoLLk8ajN27AP2M-nZG01TAA

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

수행해야 하는 내용은 간단하다. 우선 안내 메시지에 나오는 내용대로 파일을 생성한 뒤, 해당 파일을 SSH나 FTP를 통해 웹 사이트 쪽으로 옮겨서 제시된 URL을 브라우저로 접근했을 때 파일 내용이 출력되도록 만들면 된다.

예를 들어, 위의 경우 76KBNWL6JZHike4Rx09qoLLk8ajN27AP2M-nZG01TAA라는 이름의 파일을 확장자 없이 생성한 뒤에 76KBNWL6JZHike4Rx09qoLLk8ajN27AP2M-nZG01TAA.58_4VravQGNewFtLuEwY9U_gigVOF6ubOGjqQmQPOuI라는 내용을 그대로 복붙하면 된다. 그리고 .well-known/acme-challenge라는 디렉토리를 생성한 뒤 해당 디렉토리 안에 생성한 파일을 넣어주면 된다. 이후 ssh, scp 명령어나 FileZilla같은 FTP 도구를 통해 .well-known 디렉토리 전부를 웹 사이트의 root 경로에 옮기면 끝이다.

파일을 옮기고 난 후 브라우저로 안내 메시지에 나오는 URL에 접속해보자. 의도한 파일의 내용이 정상적으로 나온다면 터미널에서 enter를 눌러서 이후 단계로 진행하면 된다. 다음과 같은 안내 문구가 출력될 것이다.

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/littlemobs.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/littlemobs.com/privkey.pem
This certificate expires on 2024-12-16.
These files will be updated when the certificate renews.

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

모든 과정이 정상적으로 진행되었다면, 앞서 명령어에서 FILEPATH에 입력한 경로에 다양한 디렉토리가 생성된 것을 확인할 수 있을 것이다. 이중에서 live/${DOMAIN} 디렉토리를 열어보면 *.pem 확장자를 가진 인증서 파일들이 존재한다. 이 파일들을 웹 사이트에 적용해보자.

카페24 웹 사이트에 무료 SSL 인증서 등록하기

이제 certbot을 통해 다운로드한 인증서 파일들을 카페24 호스팅 센터에 등록할 차례다. 이전 글에서 이미 살펴봤기 때문에 자세한 설명은 생략하도록 하겠다. 외부 인증서 등록 페이지로 이동해서 SSL 인증서 파일들을 등록해보자.

cafe24 certificatesettings

위 화면에서 "인증서(SSL CRT)" 부분에는 cert.pem 파일의 내용을, 그리고 "개인키(Private Key)" 부분에는 privkey.pem 파일의 내용을 전부 복붙하면 된다.

앞서 언급했듯이 Let's Encrypt로 발급한 인증서도 90일 동안만 유효하다. 따라서, 반드시 알람을 맞춰두고 인증서가 만료되기 전에 갱신해서 웹 사이트의 HTTPS가 유지될 수 있도록 하자.

Comments

    More Posts

    Kubernetes legacy version들의 최후 - Kubernetes apt install GPG error

    2024년 11월 초부터 ubuntu에 kubernetes 클러스터를 구성하기 위해 kubeadm, kubelet, kubectl 설치하려는데 GPG error가 발생하고 있다. Kubernetes의 package repository에서 이전 버전들을 더 이상 제공하지 않는 것일까? 어떤 문제인지 살펴보자.

    ZeroSSL로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법

    웹 사이트에 HTTPS를 적용하려면 SSL 인증서를 설정해주어야 한다. 카페24는 UI를 통해 외부 인증서를 FTP, SSH 등의 복잡한 과정 없이 설정할 수 있는 기능을 제공한다. ZeroSSL 이메일 인증을 통해 카페24에서 호스팅하는 사이트에 무료 인증서를 쉽게 적용하는 방법을 알아보자.

    초보 개발자 클릭 금지! Python으로 PostgreSQL DB 개인정보 암호화하기 1편 - 문제정의와 요구사항 분석

    AI와 빅데이터가 모든 것의 중심이 되어가는 세상에서 개인정보 보호는 매우 중요하다. 데이터 수집 과정에서 개인정보가 노출되면 심각한 범죄로 이어질 수도 있다. DB 개인정보 암호화를 하려면 어떤 것들을 고려해야 할까? 간단한 예시와 함께 DB 개인정보 암호화를 달성하기 위한 방법들을 살펴보자.

    Font Size