Press "Enter" to skip to content

우분투 20.04 (Ubuntu)에 Let’s Encrypt 설치하기

1. 소개

이번장에서는 Let’s Encrypt 라는 무로 TLS/SSL 인증서를 설치하고 웹서버에서 암호화된 HTTPS를 활성화 하는 인증을 해보도록 하겠습니다.

여기서는 Certbot을 이용하여 Ubuntu 20.04에서 Apache용 무료 SSL 인증서를 얻고 이 인증서가 자동으로 갱신되어 여러분들이 더이상 신경쓰지 않아도 되게끔 설정해보도록 하겠습니다.

Let’s Encrypt를 설치하기 위해서는 아래와 같은 선행 조건들이 실행되어야 합니다.
다음 글들을 참고하여서 WordPress 홈서버를 구축해주세요.

  1. 홈서버가 왜 필요할까? 할 수 있는것은?
  2. 우분투 20.04 (Ubuntu) USB 부팅디스크 만들기
  3. 우분투 20.04 (Ubuntu) 데스크탑 설치하기
  4. 우분투 20.04 데스크탑을 위한 초기 홈서버 설정
  5. 우분투 20.04 (Ubuntu) 홈서버를 위한 DDNS설정
  6. 우분투 20.04 (Ubuntu) 홈서버를 위한 포트포워딩 설정
  7. 우분투 20.04 (Ubuntu)에 LAMP 스택 설치하기
  8. 우분투 20.04 (Ubuntu)에 WordPress 설치하기

2. 1단계: Certbot 설치하기

Let’s Encrypt로 SSL 인증서를 얻으려면 먼저 서버에 Certbot 소프트웨어를 설치해야 합니다.
여기에 우리는 두개의 패키지가 필요합니다. 아래와 같은 단일 명령으로 두 패키지를 설치해주도록 합니다.

$ apt install certbot python3-certbot-apache

Y를 입력하고 ENTER를 입력하여 설치를 진행하도록 합니다.

이제 Certbot이 서버에 설치되었습니다. 다음 단계에서는 Apache의 구성을 확인하여 가상 호스트가 적절하게 설정되었는지 확인합니다. 이렇게 하면 certbot클라이언트 스크립트가 도메인을 감지하고 새로 생성된 SSL 인증서를 자동으로 사용하도록 웹 서버를 재구성할 수 있습니다.

3. 2단계: Apache 가상 호스트 구성 확인하기 (옵션)

웹서버에 대한 SSL을 자동으로 획득하고 구성할 수 있으려면 Certbot이 Apache 구성 파일 내에서 올바른 가상 호스트를 찾아야 합니다. 서버 도메인 이름은 구성 블록 내에 정의된 ServerName및 지시문에서 몇가지를 확인해주시고 넘어가주시면 됩니다.

이전의 글들을 잘 따라와 주셨다면 굳이 진행하지 않아주셔도 되는 단계입니다.

확인하기 위하여 텍스트 편집기를 이용하여 여러분 도메인의 가상 호스트 파일을 열어줍니다.

$ vi /etc/apache2/sites-available/jake.conf

기존에 설정해놓은 것들이 올바른지 다시한번 확인해줍니다.

...

ServerName jakeson.net

ServerAlias www.jakeson.net

...

이전에 입력해둔것 같이 여러분의 도메인이 설정이 잘 되어있다면 :wq를 입력하여 저장하고 텍스트 편집기를 빠져나오도록 합니다.

만약 수정이 이뤄졌다면 다음 명령을 실행하여 변경 사항을 새로고침 해주도록 합니다.

$ apache2ctl configtest

그 후 나오는 Output으로 Syntax OK 응답을 받아야만 합니다.
OK를 받았다면 다음을 입력하여 Apache를 다시 로드 하도록 합니다.

$ systemctl reload apache2

4. 3단계: 방화벽을 통한 HTTPS 허용해주기

이전의 글들을 따라 UFW 방화벽을 활성화 한 경우, HTTPS 트래픽 역시 허용하도록 설정을 조정해 주어야 합니다. 설치시에 Apache는 몇가지 다른 UFW 응용 프로그램 프로필을 등록할 것입니다.
Apache Full 프로필을 활용한다면 서버에서 HTTP와 HTTPS 두개의 트래픽 모두 허용이 가능합니다.

$ ufw status

Apache 설치 가이드를 따른 경우 출력은 다음과 같아야 합니다. 

Output

Status: active

To                         Action      From

--                         ------      ----

OpenSSH                    ALLOW       Anywhere                 

Apache                     ALLOW       Anywhere            

OpenSSH (v6)               ALLOW       Anywhere (v6)            

Apache (v6)                ALLOW       Anywhere (v6)

추가로 HTTPS 트래픽을 허용하려면 “Apache Full” 프로필을 허용하고 중복 “Apache” 프로필을 삭제합니다.

$ ufw allow 'Apache Full'

$ ufw delete allow 'Apache'

이제 상태가 다음과 같이 표시됩니다.

$ ufw status

Output

Status: active

To                         Action      From

--                         ------      ----

OpenSSH                    ALLOW       Anywhere                 

Apache Full                ALLOW       Anywhere                 

OpenSSH (v6)               ALLOW       Anywhere (v6)            

Apache Full (v6)           ALLOW       Anywhere (v6)

이제 Certbot을 실행하고 인증서를 얻을 준비가 되었습니다.

See also  우분투 20.04 데스크탑을 위한 초기 홈서버 설정

5. 4단계: SSL 인증서 받기

Certbot은 플러그인을 통해 SSL 인증서를 얻는 다양한 방법을 제공합니다. Apache 플러그인은 Apache를 재구성하고 필요할 때마다 구성을 다시 로드합니다. 이 플러그인을 사용하려면 다음을 입력하세요.

$ certbot --apache

이 스크립트는 SSL 인증서를 구성하기 위해 일련의 질문에 답하라는 메시지를 표시합니다. 먼저 유효한 이메일 주소를 묻습니다. 이 이메일은 갱신 알림 및 보안 고지에 사용됩니다.

Output

Saving debug log to /var/log/letsencrypt/letsencrypt.log

Plugins selected: Authenticator apache, Installer apache

Enter email address (used for urgent renewal and security notices) (Enter 'c' to

cancel): you@your_domain

유효한 이메일 주소를 입력한 후 ENTER를 눌러 다음 단계로 진행하십시오. 그러면 Let’s Encrypt 서비스 약관에 동의하는지 확인하라는 메시지가 표시됩니다. A를 눌러 다음으로 넘어갈 수 있습니다.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Please read the Terms of Service at

https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must

agree in order to register with the ACME server at

https://acme-v02.api.letsencrypt.org/directory

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(A)gree/(C)ancel: A

다음으로 전자 프론티어 재단과 이메일을 공유하여 뉴스 및 기타 정보를 받을 것인지 묻는 메시지가 표시됩니다. 콘텐츠를 구독하지 않으려면 N을 입력합니다.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Would you be willing to share your email address with the Electronic Frontier

Foundation, a founding partner of the Let's Encrypt project and the non-profit

organization that develops Certbot? We'd like to send you email about our work

encrypting the web, EFF news, campaigns, and ways to support digital freedom.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(Y)es/(N)o: N

다음 단계에서는 HTTPS를 활성화하려는 도메인을 Certbot에 알리라는 메시지가 표시됩니다. 나열된 도메인 이름은 Apache 가상 호스트 구성에서 자동으로 가져오므로 가상 호스트에 올바른 설정이 구성되어 있는지 확인하는 것이 중요합니다.

나열된 모든 도메인 이름에 대해 HTTPS를 활성화 하려면 아무것도 입력하지 않고 그냥 ENTER를 눌러 진행합니다. (권장) 만약 원하는 도메인에 대해서만 HTTPS를 활성화 하려면 각각의 해당번호를 나열한 뒤 ENTER를 입력해주세요.

Which names would you like to activate HTTPS for?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: jakeson.net

2: www.jakeson.net

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Select the appropriate numbers separated by commas and/or spaces, or leave input

blank to select all options shown (Enter 'c' to cancel):

그러고 나면 다음과 같은 출력이 표시됩니다.

Obtaining a new certificate

Performing the following challenges:

http-01 challenge for jakeson.net

http-01 challenge for www.jakeson.net

Enabled Apache rewrite module

Waiting for verification...

Cleaning up challenges

Created an SSL vhost at /etc/apache2/sites-available/jakeson.net-le-ssl.conf

Enabled Apache socache_shmcb module

Enabled Apache ssl module

Deploying Certificate to VirtualHost /etc/apache2/sites-available/jakeson.net-le-ssl.conf

Enabling available site: /etc/apache2/sites-available/jakeson.net-le-ssl.conf

Deploying Certificate to VirtualHost /etc/apache2/sites-available/jakeson.net-le-ssl.conf

다음으로 HTTP 트래픽을 HTTPS로 리디렉션할지 여부를 선택하라는 메시지가 표시됩니다. 실제로 누군가가 암호화되지 않은 채널(HTTP)을 통해 웹사이트를 방문하면 자동으로 웹사이트의 HTTPS 주소로 리디렉션됩니다.

See also  우분투 20.04 (Ubuntu)에 LAMP 스택 설치하기

별도의 방법으로 HTTP를 HTTPS로 자동으로 접속하지 못하게 하려면 1번을 눌러야 합니다. 하지만 우리는 이러한 특별 케이스가 아니므로 2를 눌러 리디렉션을 활성화 해줍니다.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: No redirect - Make no further changes to the webserver configuration.

2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for

new sites, or if you're confident your site works on HTTPS. You can undo this

change by editing your web server's configuration.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

이 단계 후에는 Certbot의 구성이 완료되고 새 인증서에 대한 최종 설명, 생성된 파일의 위치 및 인증서의 신뢰성을 분석하는 외부 도구를 사용하여 구성을 테스트하는 방법이 표시됩니다.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations! You have successfully enabled https://jakeson.net and

https://www.jakeson.net

You should test your configuration at:

https://www.ssllabs.com/ssltest/analyze.html?d=jakeson.net

https://www.ssllabs.com/ssltest/analyze.html?d=www.jakeson.net

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/jakeson.net/fullchain.pem

   Your key file has been saved at:

   /etc/letsencrypt/live/jakeson.net/privkey.pem

   Your cert will expire on 2020-07-27. To obtain a new or tweaked

   version of this certificate in the future, simply run certbot again

   with the "certonly" option. To non-interactively renew *all* of

   your certificates, run "certbot renew"

 - Your account credentials have been saved in your Certbot

   configuration directory at /etc/letsencrypt. You should make a

   secure backup of this folder now. This configuration directory will

   also contain certificates and private keys obtained by Certbot so

   making regular backups of this folder is ideal.

 - 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

이제 인증서가 설치되어 Apache 구성에 로드됩니다. 사용하여 웹사이트를 새로고침하고 브라우저의 보안 표시기를 확인하세요. 일반적으로 주소 표시줄에 https://와 함께 자물쇠 아이콘을 포함하여 사이트가 적절하게 보호되고 있음을 표시해야 합니다.

마지막 단계에서는 인증서가 만료 날짜 전에 자동으로 갱신되도록 보장하는 Certbot의 자동 갱신 기능을 설정해주도록 합니다.

6. 5단계: Certbot 자동 갱신 설정하기

See also  우분투 20.04 (Ubuntu) 홈서버를 위한 DDNS설정

Let’s Encrypt의 인증서는 90일 동안만 유효합니다. 이는 사용자가 인증서 갱신 프로세스를 자동화하고 오용된 인증서나 도난 키가 조만간 만료되도록 하기 위함입니다.

우리가 미리 설치한 certbot 패키지에서는 관리하는 갱신 스크립트를 포함하여 모든 갱신을 처리하고, 하루에 두번 실행되며 만료 30일 이내의 모든 인증서를 자동으로 갱신하여 줍니다.

$ systemctl status certbot.timer

다음과 유사한 출력이 표시됩니다.

Output

● certbot.timer - Run certbot twice daily

     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)

     Active: active (waiting) since Fri 2022-02-04 17:57:48 UTC; 17h ago

    Trigger: Sat 2022-02-05 23:50:31 UTC; 12h left

   Triggers: ● certbot.service

Feb 04 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

갱신 프로세스를 테스트하려면 다음을 사용하여 시험 실행을 할 수 있습니다.

$ certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 필요한 경우 Certbot은 인증서를 갱신하고 Apache를 다시 로드하여 변경 사항을 적용합니다. 자동 갱신 프로세스가 실패하면 Let’s Encrypt는 지정한 이메일로 메시지를 보내 인증서가 만료될 때 경고합니다.

이제 여러분들의 홈서버와 워드프레스를 이용한 홈페이지가 완성이 되었습니다. 여기까지 따라와 주셔서 감사합니다.

그리고 다음편에서 이어지는 OwnCloud를 이용한 클라우드 서버까지 완료를 하면 이제 홈서버로써 기본적인 기능들은 마무리가 됩니다.