서버 운영 관리 [ Tip ]

서버클라우드에 무료 SSL인증서를 발급하기 [ 리눅스 ]

본 메뉴얼은 Let's Encrypt FreeSSL/TLS 무료인증서에 대하여 설명합니다.

 

Let's Encrypt FreeSSL/TLS은 Mozilla, Cisco, Akamai, EFF, id entrust 등이 모여서
ISRG(Internet Security Research Group)라는 SSL 인증기관을 만들어 SSL을 무료로 제공하고 있으며, 
최근에는 Facebook, 워드프레스를 만드는 Automattic, shopify 등 많은 회사가 스폰서로 참여하고 있습니다.

IWINV 는 "서버클라우드" 이용시 Let's Encrypt FreeSSL/TLS 무료 인증서의 발급/갱신 절차를 
"기술지원 서비스"를 통해  제공합니다.  [ 기술지원 요청에 따른 작업비용 별도 ]

 

SSL 간단한 동작 과정


SSL(Secure Socket Layer)은 웹사이트의 전송 데이터를 https 프로토콜을 사용하여 암호화 통신하며,
웹사이트 전체 또는 개인정보 등의 데이터 전송시 암호화여 안전한 데이터 전송이 가능하게 해주는 기술입니다.

1. 웹브라우저에서 https://도메인 입력으로 SSL로 암호화된 페이지를 요청.
2. 웹서버에서 Public Key를 인증서와 함께 전송.
3. 웹브라우저에서 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 
    서명된 것인지 확인.
4. 웹브라우저에서 Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비롯한
    URL, http 데이터들을 암호화해서 전송.
5. 웹서버의 Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화.
6. 웹서버는 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서
    브라우저로 전송.
7. 웹브라우저에서 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 표시.

 

Let's Encrypt - 무료 SSL 설치 방법 [ Linux ] (CentOS 7, CentOS8, Ubuntu 16 ~ 22)


※ Let's Encrypt 를 통해 인증서를 발급받기 위해서는 Let's Encrypt 클라이언트가 필요하며, Python 2.5 이상의 패키지가 설치되어 있어야 합니다.


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

certbot 클라이언트가 설치 [ 사전설치 ]
# CentOS 또는 Fedora : yum install -y certbot certbot-apache certbot-nginx mod_ssl
# Ubuntu  : apt-get install -y certbot certbot-apache certbot-nginx mod_ssl

 

 

▶ 인증서 발급

# certbot certonly --webroot --agree-tos -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

 

--webroot : 발급받는 방식

-a : authenticator plugin

--agree-tos : ACME 서버의 가입자 동의서에 동의

--rsa-key-size : 인증서 키 사이즈 기본은 2048

-w : web document root path

-m : 이메일 주소

-d : SSL 발급 도메인명

* 하나의 도메인(같은 이름의)에 대하여 1일 3회 이상 발급 테스트 시 발급이 제한됨

인증서 생성 경로 예시
- /etc/letsencrypt/archive/
- /etc/letsencrypt/live/     -> 실제 운영되는 파일
- /etc/letsencrypt/renewal/

 

▶ 인증서 삭제

발급된 인증서의 삭제는 “certbot” 을 이용하여 삭제해야 추후 다시 발급할 수 있으며, 인증서 삭제 명령 후 인증서가 생성되었던 경로 등을 확인해 보면,
삭제한 도메인의 폴더가 삭제된 것을 확인 할 수 있습니다. 


#  certbot delete --cert-name <도메인명>

또는

# certbot revoke --cert-path /etc/letsencrypt/live/도메인/cert.pem

 

▶ 인증서 업데이트(갱신)

# certbot renew
※ 반드시 90일이 되기 전에 업데이트 지속적으로 진행해야 인증서를 정상적으로 유지할 수 있습니다.

갱신을 할 수 있는 기간은 인증서 기간 중 61일 ~ 90일 사이에 갱신을 할 수 있습니다.

 

▶ 인증서 자동 갱신 설정 crontab 

# vi /etc/crontab

30 4 1,16 * * root /usr/bin/certbot renew

32 4 1,16 * * root systemctl reload httpd                      (httpd 패키지 설치)

32 4 1,16 * * root /etc/init.d/apachectl graceful              (httpd 소스 설치)

 

# systemctl restart crond (Redhat 계열)

# systemctl restart cron (Debian 계열)

 

▶ Apache 모듈 확인

# ps -ef | grep httpd

/usr/local/apache/bin/httpd -k start 로 결과값이 출력되면 소스설치

/sbin/httpd 로 결과값이 출력되면 패키지설치

 

# which apachectl 

결과값 확인하여 환경변수 안되어 있다면 설정합니다.

 

apahce 2.4기준

# /usr/local/apache/bin/apachectl -M | grep -E 'ssl|socache'

socache_shmcb_module (shared)

socache_dbm_module (shared)

ssl_module (shared)

 

apahce 2.4 httpd.conf

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

LoadModule socache_dbm_module modules/mod_socache_dbm.so

LoadModule ssl_module modules/mod_ssl.so

 

apache 2.2 httpd.conf

LoadModule ssl_module modules/mod_ssl.so

 

-> 주석처리를 풀것


▶ Apache 설정

 

DocumentRoot 웹루트경로

ServerName 도메인명

ServerAlias 도메인명

SSLEngine on

SSLCertificateFile /etc/letsencrypt/live/도메인명/cert.pem

SSLCertificateKeyFile /etc/letsencrypt/live/도메인명 /privkey.pem

SSLCertificateChainFile /etc/letsencrypt/live/도메인명/fullchain.pem        

 

 

privkey.pem = key파일
cert.pem = 인증서 파일
chain.pem = 인증서 발급자 파일
fullchain.pem = cert.pem + chain.pem 하나로 합친파일

 

▶ 무료 인증서 사용시 주의사항


1. 인증서 관련 피해 발생시 손해보험사의 보상을 받을 수 없습니다.
2. Windows XP SP3 이하 이용자는 정상적인 SSL 통신이 되지 않습니다.
3. 일부 브라우저의 경우 호환성 문제가 발생할 수 있습니다.
4. 인증서의 만료일은 90일입니다.

※ "온라인 기술지원" 서비스를 통해 IWINV 에서 Let'sencrypt 인증서 발급시 자동 갱신 프로세스가 제공됨 

 

▶ 호환성


Compatible

Incompatible

Mozilla Firefox >= v2.0

Google Chrome

Internet Explorer on Windows XP SP3 and higher

Microsoft Edge

Android OS >= v2.3.6

Safari >= v4.0 on macOS

Safari on iOS >= v3.1

Debian Linux >= v6

Ubuntu Linux >= v12.04

NSS Library >= v3.11.9

Amazon FireOS (Silk Browser)

Cyanogen > v10

Jolla Sailfish OS > v1.1.2.16

Kindle > v3.4.1

Java 7 >= 7u111

Java 8 >= 8u101

Blackberry OS v10, v7, & v6

Android < v2.3.6

Nintendo 3DS

Windows XP prior to SP3

cannot handle SHA-2 signed certificates

Java 7 < 7u111

Java 8 < 8u101

Windows Live Mail (2012 mail client, not webmail)

cannot handle certificates without a CRL

 

▶ Let's Encrypt FreeSSL/TLS Major Sponsors