Ubuntu 18.04에서 Let's Encrypt를 사용하여 Apache를 보호하는 방법

Ubuntu 18.04에서 Let's Encrypt를 사용하여 Apache를 보호하는 방법

소개


Let's Encrypt는 인증서 발급 기관(CA)으로 무료 인증서TLS/SSL certificates를 획득하고 설치하는 방법을 제공하여 웹 서버에서 암호화된 HTTPS를 사용합니다.이것은 소프트웨어 클라이언트 Certbot 를 제공함으로써 절차를 간소화하는데, 이 클라이언트는 대부분의 (전부가 아니라면) 필요한 절차를 자동화하려고 시도한다.현재 아파치와 Nginx에서 인증서를 얻고 설치하는 전체 과정은 완전히 자동화되어 있다.
이 강좌에서는 Certbot을 사용하여 Ubuntu 18.04에서 Apache의 무료 SSL 인증서를 가져오고 인증서가 자동 갱신으로 설정되었는지 확인합니다.
이 강좌는 기본 프로필 대신 별도의 아파치 가상 호스트 파일을 사용하여 사이트를 설정합니다. 이 사이트는 Let's Encrypt로 보호됩니다.We recommend 서버에서 호스팅되는 각 도메인에 새 Apache 가상 호스트 파일을 만듭니다. 일반적인 오류를 피하고 기본 파일을 반환 설정으로 유지보수하는 데 도움이 되기 때문입니다.

선결 조건


이 강좌를 완성하려면 다음이 필요합니다.

  • 이 강좌initial server setup for Ubuntu 18.04에 따라 설정된 Ubuntu 18.04 서버는 sudo 비root 사용자와 방화벽을 포함한다.

  • 완전히 등록된 도메인 이름입니다.이 강좌는 항상\u 도메인을 예로 들 것입니다.Namecheap에서 도메인 이름을 구입하거나 Freenom에서 도메인 이름을 무료로 받거나 선택한 도메인 이름 등록기를 사용할 수 있습니다.

  • 서버에 다음 두 개의 DNS 레코드가 설정되어 있습니다.추가 방법에 대한 자세한 내용은 this introduction to DigitalOcean DNS 을 참조하십시오.
  • 서버의 공용 IP 주소를 가리키는 A 레코드입니다.
  • 서버의 공용 IP 주소를 가리키는 A 레코드입니다.

  • Apache는 다음과 같은 방법으로 설치됩니다How To Install Apache on Ubuntu 18.04.도메인이 있는지 확인하십시오 virtual host file.이 강좌는 your_domain 을 예로 들 것이다.
  • 1단계 - Certbot 설치


    Let's Encrypt를 사용하여 SSL 인증서를 받으려면 서버에 Certbot 소프트웨어를 설치해야 합니다.이 강좌에서는 기본 Ubuntu 패키지 저장소를 사용하여 Certbot을 설치합니다.
    다음 명령을 실행하면 www.your_domain/etc/apache2/sites-available/your_domain.conf 두 개의 패키지가 설치됩니다.후자는 Certbot과 Apache를 통합한 플러그인으로, 웹 서버에서 인증서를 자동으로 가져오고 HTTPS를 구성하는 하나의 명령을 사용할 수 있습니다.
    1. sudo apt install certbot python3-certbot-apache
    certbot 를 눌러 설치를 확인하고 python3-certbot-apache 를 눌러 수락합니다.
    Certbot이 현재 서버에 설치되어 있습니다.그러면 Apache 구성을 확인하여 가상 호스트가 올바르게 설정되었는지 확인합니다.이것은 Y 클라이언트 스크립트가 도메인을 검사하고 웹 서버를 다시 설정하여 새로 생성된 SSL 인증서를 자동으로 사용할 수 있도록 합니다.

    2단계 - Apache 가상 호스트 구성 확인


    웹 서버의 SSL을 자동으로 가져오고 설정하려면 Certbot은 아파치 프로필에서 정확한 가상 호스트를 찾을 수 있어야 합니다.ENTER 구성 블록에 정의된 certbotServerName 명령에서 서버 도메인 이름을 검색합니다.
    virtual host set up step in the Apache installation tutorial를 따르는 경우 ServerAlias 도메인에 VirtualHost 블록을 설정하고 VirtualHost 명령을 적절히 설정해야 합니다.
    확인하려면 /etc/apache2/sites-available/your_domain.conf 또는 원하는 텍스트 편집기를 사용하여 도메인의 가상 호스트 파일을 엽니다.
    1. sudo nano /etc/apache2/sites-available/your_domain.conf
    기존 ServerNamenano 행 찾기:
    /etc/apache2/sites available/your\u 필드.형태
    ...
    ServerName your_domain;
    SeverAlias www.your_domain
    ...
    
    ServerNameServerAlias 이 설정되어 있으면 텍스트 편집기를 종료하고 다음 단계를 계속할 수 있습니다.사용 중인 경우 ServerName 를 누른 다음 ServerAliasnano 을 누릅니다.
    현재 가상 호스트 구성이 일치하지 않으면 업데이트하십시오.그런 다음 텍스트 편집기를 저장하고 종료합니다.그런 다음 변경 사항을 확인합니다.
    1. sudo apache2ctl configtest
    가상 호스트 파일의 구문에 오류가 없으면 CTRL + X 응답을 받습니다.오류가 발생하면 가상 호스트 파일을 다시 열고 입력 오류나 누락된 문자가 있는지 확인하십시오.구성 파일의 구문이 올바르면 Apache를 다시 로드하여 새 구성을 로드합니다.
    1. sudo systemctl reload apache2
    이러한 변경 사항이 적용되면 Certbot에서 올바른 VirtualHost 블록을 찾아 업데이트할 수 있습니다.
    이제 방화벽을 업데이트하여 HTTPS 트래픽을 허용합니다.

    3단계 - HTTPS가 방화벽을 통과하도록 허용


    UFW 방화벽이 필수 가이드의 권장 사항에 따라 활성화된 경우 HTTPS 트래픽을 허용하도록 설정을 조정해야 합니다.Apache는 몇 개의 UFW 응용 프로그램 개요 파일을 등록했습니다. 서버에서 HTTP와 HTTPS의 통신을 허용하기 위해 Apache 전체 개요 파일을 사용할 수 있습니다.
    다음 명령을 실행하여 서버에서 현재 허용되는 트래픽 유형을 확인합니다.
    1. sudo ufw status
    Apache 설치 가이드 중 하나를 따르는 경우 출력에 다음과 같은 내용이 생성됩니다. 즉, 포트 Y 의 HTTP 트래픽만 허용됩니다.
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)
    HTTPS 트래픽을 별도로 허용하려면ENTER 구성 파일을 허용합니다.
    1. sudo ufw allow 'Apache Full'
    그런 다음 이중화Syntax OK 폼 팩터 여유분을 제거합니다.
    1. sudo ufw delete allow 'Apache'
    상태를 다시 확인합니다.
    1. sudo 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을 실행하고 인증서를 받을 준비가 되었습니다.

    단계 4 - SSL 인증서 얻기


    Certbot은 플러그인을 통해 SSL 인증서를 얻을 수 있는 다양한 방법을 제공합니다.Apache 플러그인은 Apache를 재구성하고 필요한 경우 구성을 다시 로드하는 역할을 합니다.이 플러그인을 사용하려면 다음과 같이 하십시오.
    1. sudo 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): [email protected]_domain
    유효한 이메일 주소를 제공한 후 80 를 눌러 다음 단계를 계속합니다.암호화 서비스 약관에 동의하는지 확인해 달라고 요청할 것입니다.Apache FullApache 확인:
    Output
    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
    다음은 뉴스와 다른 정보를 받기 위해 전자 최첨단 기금회와 전자메일을 공유하고 싶으냐는 질문을 받을 것입니다.구독을 원하지 않으면 ENTER 을 누르고, 그렇지 않으면 A 을 누르고, ENTER 을 누르면 다음 단계를 계속합니다.
    Output
    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
    Certbot에 HTTPS를 활성화할 도메인을 묻는 메시지가 표시됩니다.도메인 이름 목록은 Apache 가상 호스트 구성에서 자동으로 가져옵니다.이것이 바로 가상 호스트에 올바른 NY 설정이 설정되어 있는지 확인해야 하는 이유입니다.나열된 모든 도메인 이름에 대해 HTTPS를 사용하려면(권장) 프롬프트를 비우고 ENTER 키를 눌러 계속합니다.그렇지 않으면 각 적절한 숫자를 나열하고 쉼표 및/또는 공백으로 구분한 다음 ServerName 키를 눌러 HTTPS를 활성화할 도메인을 선택합니다.
    Output
    Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: your_domain 2: your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
    다음 출력을 받게 됩니다.
    Output
    Obtaining a new certificate Performing the following challenges: http-01 challenge for your_domain http-01 challenge for your_domain Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
    그러면 HTTP 트래픽을 HTTPS로 지정할 것인지 여부를 선택하라는 메시지가 표시됩니다.이것은 암호화되지 않은 채널(HTTP)을 통해 웹 사이트에 접근하는 사람이 있을 때 웹 사이트의 HTTPS 주소로 자동으로 리디렉션된다는 것을 의미합니다.리디렉션을 사용하려면 ServerAlias 을 선택하거나 ENTER 웹 사이트에 액세스하는 단독 방법으로 HTTP 및 HTTPS를 사용하려면 다음을 선택합니다.
    Output
    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 구성이 완료됩니다.새 인증서, 파일 생성 위치 및 외부 도구 테스트 구성을 사용하여 인증서의 신뢰성을 분석하는 방법에 대한 마지막 설명을 받게 됩니다.
    Output
    Congratulations! You have successfully enabled https://your_domain and your_domain You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain https://www.ssllabs.com/ssltest/analyze.html?d=your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2022-03-07. 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" - 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 구성에 다운로드, 설치 및 로드됩니다.ENTER를 사용하여 웹 사이트를 다시 불러오고 브라우저의 안전 표시등을 주의하십시오.이것은 사이트가 적당한 보호를 받았음을 표시해야 한다. 보통 주소 표시줄에 잠금 아이콘이 있다.
    외부 서비스 측면에서 인증서의 등급을 검증하고 인증서에 대한 상세한 정보를 얻을 수 있습니다.
    다음 단계에서는 인증서가 만료되기 전에 자동으로 갱신될 수 있도록 Certbot의 자동 갱신 기능을 테스트합니다.

    단계 5 - Certbot 자동 갱신 확인


    암호화 인증서의 유효기간은 90일입니다.인증서 갱신 과정을 자동화하고 잘못된 인증서나 도난당한 키가 기한을 앞당길 수 있도록 하기 위해서다.
    설치된2 패키지는 갱신 스크립트를 1에 포함하여 갱신을 처리합니다. 이 스크립트는 https://라는 certbot 서비스로 관리됩니다.이 스크립트는 매일 두 번 실행되며, 만료된 30일 이내의 모든 인증서를 자동으로 갱신합니다.
    이 서비스의 상태를 확인하여 활성 상태이고 실행 중인지 확인합니다.
    1. sudo systemctl status certbot.timer
    다음과 같은 출력을 받을 수 있습니다.
    Output
    ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.
    /etc/cron.d 를 사용하여 업데이트 프로세스를 테스트합니다.
    1. sudo certbot renew --dry-run
    만약 당신이 어떤 오류를 받지 않았다면, 모든 것이 준비되었다.필요한 경우 인증서를 갱신하고 Apache를 다시 로드하여 변경 사항을 가져옵니다.자동 갱신 프로세스가 실패하면 Let's Encrypt는 인증서가 만료될 때 경고하는 메시지를 지정한 이메일로 보냅니다.

    결론


    이 강좌에서는 Let's Encrypt clientsystemctl를 설치하여 도메인에 SSL 인증서를 설정하고 설치했으며 Certbot의 자동 인증서 갱신 서비스가 certbot.timer 에서 활성 상태인지 확인합니다.Certbot 사용에 대한 자세한 내용은 SSL Labs Server Test 부터 확인할 수 있습니다.