본문으로 건너뛰기

Linux 서버에서 Let's Encrypt(무료 인증서)를 발급하기

본 매뉴얼은 Let’s Encrypt Free SSL/TLS 무료인증서 동작 및 설치경로를 설명합니다.

가이드 안내

가이드
  • iwinv 가상서버는 웹에서 콘솔 서비스를 제공하기 때문에 웹 계정을 도용당하게 될 경우 가상서버 보안에 취약할 수 있습니다.
  • 리눅스 서버시 GRUB Password를 설정하면 GRUB 진입 시 패스워드가 필요하기 때문에 가상서버 도용을 방지할 수 있습니다.
  • 해당 내용은 가상서버 뿐만 아니라 물리서버에서도 적용 가능한 방법입니다.

✅ 테스트 환경 : Rocky OS 8, Ubuntu 22.04 LTS
✅ 난이도 : 초급

주의 사항

주의 사항
  • 리부팅 작업이 동반될 수 있으므로 서버가 정상적으로 올라오지 않는 경우가 발생할 수 있으니 유의해야 합니다.
  • 작업 전 가상서버 이미지 생성 백업을 권장드립니다.
  • 반드시 서버를 사용하지 않거나 접속자가 없는 시간을 선택해서 해당 작업을 진행합니다.
  • 리부팅 과정에서 서버가 정상적으로 부팅되지 않을수도 있습니다.

Let’s Encrypt란?


Let’s Encrypt는 Mozilla, Cisco, Akamai, EFF 등이 설립한 비영리 기관인 ISRG(Internet Security Research Group)를 통해 무료로 SSL/TLS 인증서를 제공하는 글로벌 인증기관(CA)입니다.

현재는 Meta(구 Facebook), Automattic(WordPress), Shopify, Google Chrome 등 세계적인 IT 기업들이 스폰서로 참여하고 있으며, 인터넷 환경을 더 안전하게 만들기 위해 전 세계 수억 개의 웹사이트가 Let's Encrypt를 활용하여 HTTPS 보안 통신을 구현하고 있습니다.

※ '온라인 기술지원' 서비스를 통해 iwinv에서 Let's Encrypt 인증서 발급 시 자동갱신 프로세스가 제공됩니다.
[기술지원 요청에 따른 작업비용 별도]

SSL/TLS 동작과정


SSL/TLS(Secure Socket Layer / Transport Layer Security)는 웹사이트의 전송 데이터를 ‘HTTPS 프로토콜’ 을 활용하여 암호화 통신하는 기술입니다. 웹사이트 전체나 개인정보 등의 데이터를 암호화하여 중간에 누군가 훔쳐보거나 위변조할 수 없도록 안전하게 전송합니다.

자세한 동작 과정은 아래와 같습니다.

  1. 웹 브라우저에서 https://도메인을 입력하여 서버에 보안 연결을 요청합니다.

  2. 웹 서버에서 자신의 공개키(Public Key)가 포함된 SSL/TLS 인증서를 전송합니다.

  3. 웹 브라우저에서 자신이 신뢰하는 인증기관(Root CA) 목록을 확인하여 서버가 보낸 인증서가 진짜인지 검증합니다.

  4. 웹 브라우저와 웹 서버가 안전한 알고리즘으로 패킷을 교환하며 실제 데이터를 암호화할 대칭키(Session Key)를 실시간으로 합의하여 생성합니다.

  5. 암호화 키 생성이 완료되면 웹 브라우저와 웹 서버는 앞으로 이 키를 사용해 통신하겠다는 신호를 주고받으며 핸드셰이크를 완료합니다.

  6. 웹 브라우저에서 사용자가 요청한 URL과 HTTP 데이터를 앞서 합의된 대칭키로 암호화하여 전송합니다.

  7. 웹 서버에서 대칭키로 데이터를 복호화해 확인한 뒤 응답 데이터를 다시 대칭키로 암호화하여 전송하면, 웹 브라우저가 이를 복호화하여 화면에 표시합니다.

Let's Encrypt - 무료 SSL 설치 방법 [ Linux ] (Rocky OS 8~ ,Ubuntu 22.04 LTS ~)


※ Let's Encrypt 인증서를 발급 및 관리하기 위해서는 공식 클라이언트인 Certbot 패키지 설치가 필요하며, 최신 환경 시스템에서는 Python 3 기반의 구동 환경을 자동으로 구성합니다.

Let's Encrypt 클라이언트 다운로드


# 외부 확장 저장소(EPEL) 활성화
dnf install -y epel-release

# Certbot 및 웹서버(Apache / Nginx) 연동 플러그인 설치
dnf install -y certbot python3-certbot-apache python3-certbot-nginx mod_ssl

인증서 발급


certbot certonly --webroot -w [웹루트 디렉토리 위치] -d [도메인명]
  • --webroot : 실제 운영 중인 웹서버의 특정 디렉토리 내에 인증용 파일을 생성하여 발급받는 방식 방식
  • -w : 웹문서의 루트 디렉토리 경로
  • -m : 인증서 만료 안내 관리자 이메일
  • -d : 인증서를 발급받을 대상 도메인

인증서 삭제


# 인증서 이름 확인
certbot certificates

# 인증서 삭제
certbot delete --cert-name [도메인명]

인증서 업데이트(갱신)


certbot renew

※ Let's Encrypt 인증서의 유효기간은 90일이며, 만료 전 정상적으로 갱신을 진행하여야 서비스 중단을 방지할 수 있습니다. 기본적으로 만료일 기준 30일 이하로 남았을 때만 실제 갱신 작업이 수행됩니다.
※ CA/Browser Forum 기준 요구사항과 인터넷 보안 강화를 위해 2028년 이후에는 45일로 변경이 됩니다.

인증서 자동갱신 설정 crontab


vim /etc/crontab

# 매일 새벽 03:15에 인증서 갱신, 및 Apache Reload
15 3 * * * root /usr/bin/certbot renew --deploy-hook "systemctl reload [아파치 패키지명]"

Apache 모듈 확인


Apache 2.4 환경 기준 HTTPS 통신을 위해 아래 모듈들이 로드되어 있는지 점검하고 주석(#)을 해제하여 활성화합니다.

# 모듈 활성화 여부 확인
httpd -M | grep -E 'ssl|socache'

socache_shmcb_module (shared)
ssl_module (shared)
  • httpd.conf에서 활성화 해야 하는 모듈 라인
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

Apache 설정


Apache 2.4.8 이상 최신 버전에 호환되는 표준 가상 호스트(VirtualHost) SSL 설정 방식입니다.

<VirtualHost *:443>
# 웹루트 경로
DocumentRoot "/var/www/html"
ServerName 도메인명.com
ServerAlias www.도메인명.com

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/도메인명.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/도메인명.com/privkey.pem
</VirtualHost>
  • privkey.pem : 서버의 비밀키 파일(외부 유출 절대 금지)입니다.
  • fullchain.pem : 서버 인증서(cert.pem)와 체인 인증서(chain.pem)가 하나로 합쳐진 최신 표준 인증서 파일입니다.

인증서 호환성


브라우저 및 OS별 호환성 리스트는 Let's Encrypt 공식 문서 (https://letsencrypt.org/docs/certificate-compatibility) 를 참고하시기 바랍니다.

무료 인증서 사용 시 주의사항
  • 인증서 관련 피해가 발생 시 손해보험사의 보상을 받으실 수 없습니다.
  • 지원이 종료된 구형 운영체제(Windows 7 이하 등) 환경에서는 Let's Encrypt 루트 인증서를 인식하지 못해 정상적인 SSL 통신이 어려울 수 있습니다.
  • 최신 보안 업데이트가 적용되지 않은 일부 구버전 웹 브라우저의 경우 호환성 문제가 발생할 수 있습니다.