Lets encrypt 발급 방법

siklog

클라우드

[Server/Security] Let’s Encrypt SSL 무료 인증서 발급 방법

ms 2022. 4. 17. 18:48

Let’s Encrypt 는 보안 웹사이트를 위한 전송 계층 보안 암호화(SSL, TLS) 를 위해 무료로 인증서를 제공해주는 인증 기관이다.

인증서 발급 시 유효기간 (90일)이 존재한다.(갱신을 주기적으로 해줘야함)

0. 인증서 발급 사전 준비

먼저 인증서 발급 전 다음 조건이 필요하다.
- 인증서 설치 서버 (root 권한 필요)
- 공개 도메인 (Public Domain)

Let’s Encrypt SSL 인증서 발급은 Certbot을 이용하며,  인증서 설치를 위한 Certbot tool 을 먼저 설치해준다.
* Certbot은 우분투 20.04에서 letsencrypt을 설치했다면 그 안에 포함되어 있기 때문에 별도 Certbot을 설치할 필요는 없음

# sudo apt update
# sudo apt-get install  letsencrypt -y


웹서버에 맞는 Certbot을 추가 설치해준다.

Certbot은 파이썬 2.7 또는 3.6버젼 이상을 지원하고 있어 python2 혹은 python3를 설치해주면 된다.

* 권고사항은 python3

ubuntu에서 certbot 및 웹서버 플러그인 설치:
# sudo apt update 
# sudo apt upgrade -y 
# sudo apt install certbot python3-certbot-nginx (nginx webserver)
# sudo apt install certbot python3-certbot-apache (apache webserver)
centos에서 certbot 및 웹서버 플러그인 설치:
먼저 아래 명령어를 통해 리눅스 추가 패키지 저장소 EPEL Repo 활성을 시켜주어야 한다.
# yum install epel-release
# yum install certbot -y
# yum install python3-certbot-apache (apache webserver)
# yum install python3-certbot-nginx  (nginx webserver)

인증서 발급을 위한 패키지 설치가 완료되었다면 인증서 발급을 진행하면 된다.

certbot 을 이용한 인증서 발급 방법은 아래와 같이 크게 4가지 방법이 존재한다.

  1. webroot 를 이용한 인증서 발급
  2. webserver 를 통한 인증서 발급
  3. standalone 옵션을 이용한 인증서 발급
  4. dns 를 이용한 인증서 발급
1. webroot으로 SSL 인증서 발급

사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법으로 서버 내에 .well-known이 있는 곳을 지정해 준다.

(여기에서 설명하는 인증서 발급, 적용 환경은 Ubuntu, NginX 기준 )

1) 특정 폴더를 만든다.

2) 이 특정 폴더에서 letsencrypt.conf 파일을 만든다.

3) 이를 Nginx 설정 파일에서 이 파일을 읽어오도록 한다.

먼저 특정 폴더를 만들어 준다.

# mkdir -p /var/www/letsencrypt/.well-known/acme-challenge

다음 webroot 경로를 알려주는 letsencrypt.conf 파일을 만든 후 편집기를 이용해서 새로 만들 파일을 열어준 후 아래 내용을 추가해 준다.

* 이 파일은 일반적으로 /etc/nginx/snippets/ 위치에 만듦.

# nano /etc/nginx/snippets/letsencrypt.conf
>>
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}

설정이 끝났다면 웹서버를 다시 시작해 주도록 한다.

# sudo service nginx restart

SSL 인증서 발급

* webroot-path는 웹서버 루트가 아닌 .well-known 폴더가 있는 곳이다.

# certbot certonly --webroot --webroot-path=/var/www/letsencrypt  -d [도메인]
2. webserver 를 통한 인증서 발급

Apache나 Nginx와 같은 웹서버 옵션을 이용해서 Let’s Encrypt SSL 인증서 발급받을 수도 있다.

(여기에서 설명하는 인증서 발급, 적용 환경은 CentOS 7, Apache 기준 )

웹서버를 통한 SSL 인증서 발급은 standalone 방식과 달리 발급 받을 시 사이트 서비스를 중단하지 않아도 되며, 웹서버가 알아서 적절한 SSL 옵션을 제안해 적용해 준다.

웹서버를 이용하는 SSL 인증 방식 선택 시 Apache, Nginx 설정에서 도메인이 제대로 설정되어 있어야 하기 때문에

먼저, Apache, Nginx 설정에서 도메인이 제대로 설정되어 있는지 확인해야 한다.

* 방화벽, iptables 등과 같은 접근 제어가 설정되어 있다면 서비스 및 포트 허용을 추가적으로 진행

아래 경로에서 servername이 등록되어 있는지 확인해준다.

# cat /etc/httpd/conf/httpd.conf

아래 명령어를 이용하여 인증서 발급을 시작한다.

명령어 수행 시 certbot 은 Apache 설정파일을 참조하여 등록된 모든 호스트에 대해 인증서 발급을 수행한다.

* CentOS의 경우 /etc/httpd/conf/httpd.conf

# certbot --apache --email admin@[email_address] --agree-tos

호스트 설정을 하지 않았다면 아래 명령어로도 인증서 발급이 가능하다.

# certbot --apache certonly -d [도메인]

크론탭을 통해 자동 갱신이 설정되도록 설정할 수도 있다.

# sudo certbot renew --dry-run
3. standalone 옵션을 이용한 인증서 발급

standalone 옵션 적용 방식은 간편하고 빠르고 안정적이지만, 서비스를 중단해야하는 단점이 있다.

먼저 웹서버를 중단시킨다.

# systemctl stop httpd

certbot 명령을 이용해 SSL 인증을 시작해준다. 

# certbot certonly --standalone -d [도메인]

인증이 완료되면 웹서버를 다시 가동시켜준다.

# systemctl restart httpd
4. DNS 를 이용한 인증서 발급

와일드 카드 방식으로 인증서 발급이 가능하며, 도메인이 연결된 DNS의 TXT레코드를 이용해 인증받는 방식이다.
때문에 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 한다.

* 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 함 

인증서 발급 발급 시작:
# certbot certonly --manual -d *.[도메인] -d [도메인] --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory 
 (*.domain.com과 같이 와일드카드문자 *을 이용하면 어떠한 주소가 앞에 오더라도 똑같이 HTTPS를 적용할 수 있다.)

옵션:

--manual : 수동으로 과정을 진행한다.
-d : 등록할 도메인을 지정한다. 기존에 사용하던 도메인이름과 와일드카드 도메인 2개를 입력한다.
--preferred-challenges : DNS를 이용한 인증서 발급방식을 사용하기 위한 옵션이다. 
dns-01 : DNS를 용한 preferred-challenges를 사용시 이 옵션을 사용해야 한다.
--server : Let's Encrypt의 ACME(자동화된 인증서 관리 환경) 서버 주소 입력

위 명령을 수행하면 DNS서버에 _acme-challenge.domain.com 이름의 TXT레코드를 추가하라고 나오게 되는데 사용중인 도메인 서버에 TXT레코드에 아래 제시된 value를 추가한다.

* 레코드 등록 이전에 엔터를 누르면 안됨

* 여기서는 NCP의 Global DNS를 이용하여 TXT레코드를 등록하였다.

Lets encrypt 발급 방법

dig 또는 nslookup 등으로 TXT레코드가 설정되었는지  확인 후 진행하도록 한다.

* ANSWER SECTION에 TXT레코드가 정상적으로 출력되는 것을 볼 수 있다.

Lets encrypt 발급 방법

레코드 등록 후 엔터를 눌러 발급을 진행해 주면 아래 경로에 인증서가 발급된 것을 확인할 수 있다.

# cd /etc/letsencrypt/archive
Lets encrypt 발급 방법