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

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

2022-06-01 last update

13 minutes reading Apache CentOS Let's Encrypt Security Open Source

소개


Let’s Encrypt는 인증서 발급 기관(CA)으로 Transport Layer Security (TLS) encryption에 무료 인증서를 제공하여 웹 서버에서 암호화 HTTPS를 사용합니다.대부분의 단계를 자동화하는 소프트웨어 클라이언트 Certbot 를 통해 인증서의 생성, 검증, 서명, 설치, 갱신 과정을 간소화합니다.
이 강좌에서는 Apache를 웹 서버로 실행하는 CentOS 7 서버에서 Let's Encrypt를 사용하여 TLS/SSL 인증서를 설정합니다.또한cron 작업 자동화 인증서 갱신 과정을 사용할 것입니다. How To Use Cron To Automate Tasks On a VPS 을 통해 더 많은 정보를 알 수 있습니다.

선결 조건


이 안내서를 작성하려면 다음이 필요합니다.
  • 권한이 있는 비루트 사용자가 the CentOS 7 initial server setup guide 따라 설정하는 CentOS 7 서버입니다.
  • 지침에 따라 기본 방화벽을 구성합니다.
  • CentOS 7 서버에 Apache를 설치하고 가상 호스트를 구성했습니다.당신은 우리의 강좌Additional Recommended Steps for New CentOS 7 Servers에 따라 어떻게 설정하는지 배울 수 있습니다.도메인이 있는지 확인하십시오 How To Install the Apache Web Server on CentOS 7.이 강좌는 sudo 을 예로 들 것이다.
  • 인증서를 사용하고자 하는 등록 도메인 이름을 가지고 있거나 제어해야 합니다.도메인 이름을 등록하지 않은 경우 virtual host file 에서 하나를 구입하거나 Namecheap 에서 하나를 무료로 받거나 선택한 도메인 이름 등록기를 사용할 수 있습니다.
  • DNS는 도메인을 서버의 공용 IP 주소로 기록합니다.Digital Ocean 플랫폼을 사용하여 추가하는 방법에 대한 자세한 내용은 Freenom 을 참조하십시오.DNS A 레코드는 Let's Encrypt가 인증서를 발급하는 도메인을 어떻게 검증하는지 확인하기 위해 필요합니다.예를 들어 /etc/httpd/sites-available/example.com.conf 인증서를 얻으려면 이 도메인이 서버에 분석되어야 검증 과정이 작동합니다.우리의 설정은 example.comexample.com 을 도메인 이름으로 사용할 것입니다. 이 두 도메인 이름은 모두 유효한 DNS 기록이 필요합니다.
  • 이 모든 전제 조건을 완료한 후에 Let's Encrypt client 소프트웨어를 계속 설치합니다.

    1단계 - 클라이언트를 암호화하기 위한 Certbot 설치


    Let's Encrypt를 사용하여 SSL 인증서를 받으려면 먼저 Certbot과this introduction to DigitalOcean DNS를 설치해야 합니다. 이것은 아파치 모듈로 SSL v3 암호화에 대한 지원을 제공합니다.
    기본적으로 www.example.com 패키지는 패키지 관리자를 통해 사용할 수 없습니다.Certbot을 설치하려면 저장소 mod_ssl 를 활성화해야 합니다.
    CentOS 7 EPEL 저장소를 추가하려면 다음 명령을 실행합니다.
    1. sudo yum install epel-release
    이제 저장소에 액세스할 수 있습니다. 필요한 모든 패키지를 설치하십시오.
    1. sudo yum install certbot python2-certbot-apache mod_ssl
    설치 과정에서 GPG 키 가져오기에 대한 질문이 표시됩니다.이 키는 설치 중인 패키지의 신뢰성을 확인합니다.설치를 완료하려면 certbot 를 입력하고 프롬프트에서 y 를 눌러 GPG 키를 수락합니다.
    이 서비스가 설치되면 Certbot을 실행하고 인증서를 받을 수 있습니다.

    2단계 - 인증서 얻기


    Certbot이 설치되어 도메인에 SSL 인증서를 요청할 수 있습니다.ENTERLet's Encrypt client를 사용하여 Apache에 SSL 인증서를 생성하면 이 과정의 많은 절차를 자동화할 수 있습니다.클라이언트는 매개 변수로 제공되는 도메인에 유효한 새 SSL 인증서를 자동으로 가져와 설치합니다.
    대화식 설치를 수행하고 단일 도메인만 덮어쓰는 인증서를 얻으려면 다음 명령을 사용하여 실행합니다certbot.
    1. sudo certbot --apache -d example.com
    이것은 certbot 플러그인을 사용하여 certbot 실행하고 --apache 로고를 사용하여 인증서를 설정할 영역을 지정합니다.
    여러 도메인이나 하위 도메인에 유효한 단일 인증서를 설치하려면 명령에 추가 매개 변수로 전달하고 -d 로고로 새 도메인이나 하위 도메인을 표시할 수 있습니다.매개 변수 목록의 첫 번째 필드 이름은 인증서를 만드는 데 사용할 기본 필드를 암호화하는 것입니다.따라서 기본 도메인 이름을 목록의 첫 번째 이름으로 전달한 다음 다른 하위 도메인이나 별칭을 전달합니다.
    1. sudo certbot --apache -d example.com -d www.example.com
    이 예제의 기본 영역은 -d 입니다.example.com 유틸리티는 인증서 요청 과정에서 도메인 정보를 입력하라는 메시지를 표시할 수 있습니다.이 기능을 사용하려면 도메인 없이 호출하십시오certbot:
    1. sudo certbot --apache
    이 프로그램은 인증서 옵션을 사용자 정의할 수 있는 단계별 안내서를 제공합니다.키 복구와 알림이 누락된 전자 메일 주소를 요청하고 서비스 약관에 동의하라는 메시지를 표시합니다.명령줄에 도메인을 지정하지 않으면 도메인을 지정하라는 메시지가 표시됩니다.가상 호스트 파일이 certbot 명령을 사용하여 서비스 도메인을 명시적으로 지정하지 않으면 가상 호스트 파일을 선택해야 합니다.대부분의 경우 기본 ServerName 파일이 작동합니다.
    또한 ssl.confhttp 에 액세스하거나 모든 요청을 https 로 다시 지정하도록 강제할 수도 있습니다.보안을 강화하기 위해 암호화되지 않은 연결을 허용하는 특별한 요구가 없으면 옵션https을 선택하는 것이 좋습니다.선택을 선택하고 클릭2: Redirect.
    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
    설치가 완료되면 다음과 같은 메시지가 표시됩니다.
    Output
    IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2019-08-14. 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
    생성된 인증서 파일은 ENTER 디렉토리의 기본 도메인으로 지정된 하위 디렉토리에 있습니다.
    현재 인증서가 다운로드, 설치 및 로드되었습니다. SSL 인증서 상태를 확인하여 모든 것이 정상적인지 확인할 수 있습니다.

    3단계 - 인증서 상태 확인


    이 때 클라우드 보안 회사EPELSSL Server Test를 사용하여 Certbot이 SSL 인증서를 제대로 만들었는지 확인할 수 있습니다.
    기본 웹 브라우저에서 다음 링크를 열고 /etc/letsencrypt/live 를 기본 도메인으로 바꿉니다.
    https://www.ssllabs.com/ssltest/analyze.html?d=example.com
    
    서버에 대한 SSL 접속 테스트를 시작하는 페이지가 나타납니다.

    일단 테스트가 시작되면 몇 분이 걸려야 완성할 수 있습니다.테스트 상태가 브라우저에서 업데이트됩니다.
    테스트가 완료되면 페이지에는 서버 구성의 안전성과 품질을 평가하는 알파벳 레벨이 표시됩니다.이 문서를 작성할 때 기본 설정은 A 등급을 제공합니다.

    SSL 랩에서 이러한 레벨을 결정하는 방법에 대한 자세한 내용은 Qualys 을 참조하십시오. 여기에는 2018년 1월 계층 지정 시나리오에 대한 업데이트가 자세히 설명되어 있습니다.example.com를 사용하여 웹 사이트를 다시 불러오고 브라우저의 안전 표시등을 주의하십시오.이제 일반적으로 녹색 잠금 아이콘이 있는 사이트가 제대로 보호되었음을 나타냅니다.
    SSL 인증서를 설치하고 검증한 후 인증서의 유효성을 유지하기 위해 인증서 설정을 자동으로 갱신하십시오.

    단계 4 - 자동 갱신 설정


    인증서를 암호화하는 유효기간은 90일이지만, 60일에 한 번씩 인증서를 업데이트하여 일정한 오차를 남기는 것을 권장합니다.따라서 Best Practice는 이 프로세스를 자동으로 실행하고 인증서를 정기적으로 확인하고 갱신하는 것입니다.
    우선, 인증서 갱신에 사용할 명령을 확인하겠습니다.https:// Let's Encrypt 클라이언트는 현재 설치된 인증서를 자동으로 검사하고 만료일이 30일이 되지 않았을 때 인증서를 갱신하는 certbot 명령을 가지고 있습니다.renew 옵션을 사용하여 이 작업의 시뮬레이션을 실행하여 --dry-run 작업 방식을 테스트할 수 있습니다.
    1. sudo certbot renew --dry-run
    출력은 다음과 같습니다.
    Output
    Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator apache, Installer apache Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Waiting for verification... Cleaning up challenges Resetting dropped connection: acme-staging-v02.api.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of apache server; fullchain is /etc/letsencrypt/live/example.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/example.com/fullchain.pem (success) ...
    여러 도메인이 있는 번들 인증서를 만들면 출력에 기본 도메인 이름만 표시되지만 갱신은 인증서에 포함된 모든 도메인에 유효합니다.
    인증서가 만료되지 않도록 하는 실용적인 방법 중 하나는 SSL Labs Grading post 을 만드는 것입니다. 인증서는 정기적으로 자동 갱신 명령을 실행합니다.갱신은 먼저 만료일을 검사하고 인증서가 만료 기간이 30일 미만일 때만 갱신을 실행하기 때문에 매주 심지어 매일 실행되는cron 작업을 만드는 것이 안전합니다.
    cron job 매일 운행renew 두 번을 권장합니다.이것은 Let's Encrypt 시작 인증서가 취소된 상황에서 Certbot이 인증서를 갱신하는 시간이 반나절을 넘지 않도록 보장합니다.
    편집 cron 은 매일 두 번 갱신을 실행할 새 작업을 만듭니다.루트 사용자를 편집하려면 다음을 실행하십시오.
    1. sudo crontab -e
    텍스트 편집기에서 기본값crontab이 열리고 빈 텍스트 파일이 됩니다.이 강좌는vi 텍스트 편집기를 사용합니다.이 텍스트 편집기와 후속vim에 대한 더 많은 정보를 알고 싶으면 저희 official Certbot documentation 강좌를 보십시오.crontab 키를 눌러 삽입 모드에 들어가고 다음 줄에 추가합니다.
    crontab
    0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
    완료되면 crontab 키를 눌러 삽입 모드를 종료하고 iESC 키를 눌러 파일을 저장하고 종료합니다.이것은 매일 정오와 자정에 실행되는 새로운cron 작업을 만들 것입니다.cron 작업에 무작위 요소를 추가하면 매 시간 작업이 같은 분에 일어나지 않고 서버의 최고치가 발생합니다.:wq 1시간 이내에 갱신 작업을 1분간 무작위로 선택할 수 있습니다.
    cron 작업을 만들고 스케줄링하는 방법에 대한 더 많은 정보는 저희 Installing and Using the Vim Text Editor on a Cloud Server 안내서를 보십시오.갱신에 대한 자세한 내용은 How to Use Cron to Automate Tasks in a VPS 을 참조하십시오.

    결론


    이 안내서에는 Let's Encrypt Certbot 클라이언트를 설치하고 도메인의 SSL 인증서를 다운로드했으며 자동 인증서 갱신을 설정했습니다.Certbot 사용에 대해 궁금한 점이 있으면 공식 문의Certbot documentation로 문의하십시오.우리는 또한 중요한 업데이트를 이해하기 위해 수시로 정부Certbot documentation를 살펴보는 것을 건의합니다.