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

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

2022-05-17 last update

13 minutes reading ssl apache let's encrypt ubuntu certbot
Let's Encrypt는 인터넷 보안 연구팀(ISRG)이 만든 인증 기관입니다.그것은 수동 인증서의 창설, 검증, 설치, 업데이트를 없애는 데 목적을 둔 완전 자동화 과정을 통해 무료 SSL 인증서를 제공한다.Let's Encrypt에서 발급한 인증서는 이제 모든 주요 브라우저에서 신뢰를 받습니다.이 자습서에서는 Ubuntu 18.04의 certbot 도구를 사용하여 Apache를 암호화하는 방법에 대한 단계별 지침을 제공합니다.

선결 조건

본 강좌를 계속하기 전에 다음과 같은 선결 조건을 충족시켜야 합니다.
  • 공공 서버 IP를 가리키는 도메인 이름입니다.우리는 사용할 것이다example.com.있다
    리본 Apache installed
    도메인 이름입니다.
  • Certbot 설치

    Certbot은 기능이 완비되고 사용하기 쉬운 도구로 SSL 인증서를 획득하고 업데이트하며 웹 서버를 설정하는 작업을 자동으로 완성할 수 있다.certbot 패키지는 기본 Ubuntu 저장소에 포함되어 있습니다.패키지 목록을 업데이트하고certbot 패키지를 설치합니다:
    sudo apt updatesudo apt install certbot

    강력한 Dh(Diffie Hellman) 팀 생성

    Diffie-Hellman 키 교환(DH)은 안전하지 않은 통신 채널을 통해 암호화 키를 안전하게 교환하는 방법입니다.새 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 www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt
    코드의 중복을 피하기 위해 다음 두 개의 설정 세션을 만듭니다./etc/apache2/conf available/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/apache2/conf-available/ssl-params.conf
    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder     off
    SSLSessionTickets       off
    
    SSLUseStapling On
    SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
    
    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
    
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
    
    위의 코드 세션은 apache virtual host가 추천하는 스크레이퍼를 사용합니다
    , OCSP 바인딩을 활성화하고 HTTP는 보안(HSTS)을 엄격히 전송하며 보안 중심의 HTTP 헤더를 거의 실행하지 않습니다.프로필을 사용하기 전에 다음 명령을 실행하여 mod_sslmod_headers가 모두 활성화되었는지 확인하십시오.
    sudo a2enmod sslsudo a2enmod headers
    다음에 다음 명령을 실행하여 SSL 프로필을 활성화합니다.
    sudo a2enconf letsencryptsudo a2enconf ssl-params
    HTTP/2 모듈을 활성화하면 사이트가 더욱 빠르고 튼튼해집니다.
    sudo a2enmod http2
    Apache 프로필을 다시 불러와 변경 사항을 적용합니다.
    sudo systemctl reload apache2
    지금,웹 루트 플러그인을 사용하여 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-10-28. 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
    
    현재 인증서 파일이 있습니다. 역 가상 호스트 설정을 다음과 같이 편집하십시오: (adsby Google=window.adsby Google | | [].추진({})/etc/apache2/사용 가능한 사이트/예시.일반 도메인 이름 형식.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
    
      Protocols h2 http/1.1
    
      <If "%{HTTP_HOST} == 'www.example.com'">
        Redirect permanent / https://example.com/
      </If>
    
      DocumentRoot /var/www/example.com/public_html
      ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
      CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
    
      SSLEngine On
      SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    
      # Other Apache Configuration
    
    </VirtualHost>
    
    위의 설정에 따라 저희는Mozilla
    그리고 www에서 비ww버전으로 리디렉션합니다.필요에 따라 자유롭게 구성을 조정할 수 있습니다.Apache 서비스를 다시 불러와서 변경 사항을 적용합니다:
    sudo systemctl reload apache2
    현재 https://로 사이트를 열 수 있습니다. 녹색 자물쇠 아이콘을 볼 수 있습니다.forcing HTTPS를 사용하여 도메인을 테스트하는 경우
    , A+ 점수를 받을 것입니다.

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

    인증서의 유효기간은 90일입니다.인증서가 만료되기 전에 인증서를 자동으로 갱신하기 위해certbot 패키지는cronjob을 만들어서 매일 두 번 실행하고 인증서가 만료되기 30일 전에 인증서를 자동으로 갱신합니다.인증서가 업데이트되면 Apache 서비스를 다시 로드해야 합니다.--renew-hook "systemctl reload apache2"/etc/cron.d/certbot 파일에 추가하여/etc/cron처럼 보입니다.d/certbot
    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 apache2"
    
    은 갱신 과정을 테스트하려면certbot--dry-run 스위치를 사용할 수 있습니다.
    sudo certbot renew --dry-run
    오류가 없으면 갱신 과정이 성공했음을 나타냅니다.

    결론

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