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

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

2022-05-17 last update

13 minutes reading ssl centos apache let's encrypt certbot
Let's Encrypt는 인터넷 보안 연구팀(ISRG)이 개발한 무료, 자동화, 개방된 인증서 발급 기구이다.Let's Encrypt에서 발급한 인증서는 발급일로부터 90일 이내에 유효하며, 현재 모든 주요 브라우저에서 인증서를 신뢰합니다.이 강좌에서는 Apache를 웹 서버로 실행하는 CentOS 7 서버에 무료 Let's Encrypt SSL 인증서를 설치하는 데 필요한 절차를 소개합니다.인증서를 암호화하기 위해certbot 유틸리티를 사용합니다.

선결 조건

이 강좌를 계속하기 전에
  • 공용 서버 IP를 가리키는 도메인 이름이 있는지 확인하십시오.우리는 사용할 것이다example.com.
  • Apache is installed
    서버에서 실행됩니다.
  • Apache virtual host
    도메인 이름입니다.
  • 포트 80 및 443firewall에서 열기
  • SSL 암호화 웹 서버를 설치하는 데 필요한 다음 패키지:
    yum install mod_ssl openssl

    Certbot 설치

    Certbot은 서버에서 SSL 인증서를 얻는 과정을 간소화하는 도구로 서버에서 HTTPS를 암호화하고 자동으로 사용할 수 있습니다.certbot 패키지는 EPEL에서 설치할 수 있습니다.예 EPEL repository
    시스템에 설치되어 있지 않으면 다음과 같은 명령을 사용하여 설치할 수 있습니다.
    sudo yum install epel-release
    EPEL 저장소를 활성화한 후
    sudo yum install certbot

    강력한 Dh(Diffie Hellman) 팀 생성

    Diffie – Hellman 키 교환(DH) 설치certbot 패키지는 안전하지 않은 통신 채널을 통해 암호화 키를 안전하게 교환하는 방법입니다.보안을 강화하기 위해 새로운 2048비트 DH 매개 변수 세트를 생성합니다.
    sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
    크기를 4096비트로 변경할 수 있지만 이 경우 시스템 엔트로피에 따라 30분 이상 걸릴 수 있습니다.

    Let's Encrypt SSL 인증서 가져오기

    도메인의 SSL 인증서를 얻기 위해 Webroot 플러그인을 사용합니다. 이 플러그인은 ${webroot-path}/.well-known/acme-challenge 디렉터리에 임시 파일을 만들어서 요청한 도메인을 검증합니다.Let's Encrypt 서버는 요청한 도메인이certbot에서 실행되는 서버로 해석되는지 확인하기 위해 임시 파일에 HTTP 요청을 보냅니다.보다 간단하게 .well-known/acme-challenge 의 모든 HTTP 요청을 디렉터리 /var/lib/letsencrypt 에 비추겠습니다.다음 명령을 실행하여 디렉터리를 만들고 Apache 서버에서 쓸 수 있도록 합니다:
    sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp apache /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt
    코드가 중복되지 않도록 다음 두 개의 설정 세션을 만듭니다:/etc/httpd/conf.d/letsencrypt.conf
    Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
    <Directory "/var/lib/letsencrypt/">
        AllowOverride None
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        Require method GET POST OPTIONS
    </Directory>
    
    /etc/httpd/conf.d/ssl-params.conf
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder On
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
    Header always set X-Frame-Options SAMEORIGIN
    Header always set X-Content-Type-Options nosniff
    # Requires Apache >= 2.4
    SSLCompression off
    SSLUseStapling on
    SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
    # Requires Apache >= 2.4.11
    SSLSessionTickets Off
    
    위의 코드 세션은 추천하는 스크레이퍼를 포함하고 OCSP 제본, HTTP 엄격한 전송 보안(HSTS)을 지원하며 보안에 중점을 두지 않는 HTTP 헤더를 강제로 실행한다.Apache 설정을 다시 불러와서 변경 사항을 적용합니다:
    sudo systemctl reload httpd
    현재 웹 루트 플러그인으로 Certbot 도구를 실행하고 입력을 통해 SSL 인증서 파일을 얻을 수 있습니다:
    sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
    SSL 인증서를 성공적으로 얻으면 다음과 같은 메시지를 출력합니다:
    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 2018-12-07. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot
       again. 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
    
    CentOS 7에는 Apache 버전 2.4.6, SSLOpenSSLConfCmd 명령이 포함되지 않습니다.이 명령은 Apache 2.4.8 이후 버전에서만 사용할 수 있으며 Diffie – Hellman 키 교환 (DH) 과 같은 OpenSSL 매개 변수를 구성하는 데 사용됩니다.Let's Encrypt SSL 인증서와 생성된 DH 파일을 사용하여 새 조합 파일을 만들어야 합니다.이 동작을 실행하려면 다음과 같이 입력하십시오:
    cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem
    현재 모든 것이 설정되어 있습니다. (adsbyGoogle=window.adsbyGoogle | | [])추진({})/etc/httpd/conf.d/example.일반 도메인 이름 형식.conf
    <VirtualHost *:80>
      ServerName example.com
      ServerAlias www.example.com
    
      Redirect permanent / https://example.com/
    </VirtualHost>
    
    <VirtualHost *:443>
      ServerName example.com
      ServerAlias www.example.com
    
      <If "%{HTTP_HOST} == 'www.example.com'">
        Redirect permanent / https://example.com/
      </If>
    
      DocumentRoot /var/www/example.com/public_html
      ErrorLog /var/log/httpd/example.com-error.log
      CustomLog /var/log/httpd/example.com-access.log combined
    
      SSLEngine On
      SSLCertificateFile /etc/letsencrypt/live/example.com/cert.dh.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
      SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    
      # Other Apache Configuration
    
    </VirtualHost>
    
    위의 설정에 따라 저희는forcing HTTPS
    그리고 www에서 비ww버전으로 리디렉션합니다.필요에 따라 자유롭게 구성을 조정할 수 있습니다.Apache 서비스를 다시 시작하여 변경 사항을 적용합니다:
    sudo systemctl restart httpd
    현재 https://로 사이트를 열 수 있습니다. 녹색 자물쇠 아이콘을 볼 수 있습니다.SSL Labs Server Test를 사용하여 도메인을 테스트하는 경우
    , A+ 점수를 받을 것입니다.

    SSL 인증서 암호화를 위한 자동 갱신

    인증서의 유효기간은 90일입니다.인증서가 만료되기 전에 자동으로 갱신하기 위해서, 우리는cronjob을 만들어서 매일 두 번 실행하고, 인증서가 만료되기 30일 전에 모든 인증서를 자동으로 갱신할 것입니다.실행 crontab 명령으로 새 크롬을 만듭니다. 인증서를 갱신하고 DH 키를 포함하는 새 조합 파일을 만들고 아파치:
    sudo crontab -e
    0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload httpd"
    
    를 다시 시작하여 이 파일을 저장하고 닫습니다.갱신 과정을 테스트하려면certbot 명령을 사용하고 --dry-run 스위치를 사용하십시오:
    sudo certbot renew --dry-run
    오류가 없으면 갱신 과정이 성공했음을 나타냅니다.

    결론

    이 자습서에서 Let's Encrypt client certbot을 사용하여 도메인에 대한 SSL 인증서를 다운로드합니다.또한 중복 코드를 방지하기 위해 Apache 코드 세그먼트를 만들고 인증서를 사용하도록 구성했습니다.이 강좌의 마지막 부분에서 자동 인증서 갱신을 위해cronjob을 설정했습니다.Certbot을 사용하는 방법에 대한 자세한 내용은 their documentation
    이것은 아주 좋은 출발점이다.질문이나 피드백이 있으면 언제든지 댓글을 달아주세요.
    이 문장은 Install LAMP Stack on CentOS 7 시리즈의 일부분이다.이 시리즈의 추가 게시물: •
    How to Install Apache on CentOS 72018년 4월 27일
    Install MySQL on CentOS 72018년 5월 23일
    How to Set Up Apache Virtual Hosts on CentOS 72018년 8월 17일
    2018년 9월 8일, CentOS에서 Let's Encrypt를 사용하여 Apache 보호