SW/리눅스

Linux : CentOS 8 : Let's Encrypt 로 아파치 보호 방법, 예제, 명령어

얇은생각 2022. 4. 10. 07:30
반응형

암호화는 ISRG(Internet Security Research Group)에서 개발한 무료 자동화 개방형 인증 기관으로 무료 SSL 인증서를 제공합니다.

Let's Encrypt에서 발급한 인증서는 모든 주요 브라우저에서 신뢰되며 발급일로부터 90일 동안 유효합니다.

이 튜토리얼에서는 웹 서버로 Apache를 실행하는 Cent OS 8에 무료 Let's Encrypt SSL 인증서를 설치하는 방법에 대해 설명합니다. 인증서봇 도구를 사용하여 인증서를 획득하고 갱신합니다.

 

 

 

필수 조건

계속하기 전에 다음 필수 조건이 충족되었는지 확인하십시오.

• 도메인 이름이 공용 서버 IP를 가리킵니다. example.com을 이용하겠습니다.

• Apache는 도메인에 대해 구성된 가상 호스트를 사용하여 서버에 설치 및 실행됩니다.

• 포트 80 및 443은 방화벽에서 열려 있습니다.

SSL 암호화 웹 서버에 필요한 다음 패키지를 설치합니다.

sudo dnf install mod_ssl openssl

 

 

mod_ssl 패키지가 설치되면 로컬 호스트에 대한 자체 서명 키 및 인증서 파일을 생성해야 합니다. 파일이 자동으로 만들어지지 않는 경우 openssl 명령을 사용하여 파일을 만들 수 있습니다.

sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \
  -out /etc/pki/tls/certs/localhost.crt \
  -keyout /etc/pki/tls/private/localhost.key

 

 

 

Certbot을 설치

Certbot은 서버에서 SSL 인증서를 암호화하고 HTTPS를 자동으로 사용하도록 설정하는 프로세스를 단순화하는 무료 명령줄 도구입니다.

인증서봇 패키지는 표준 Cent OS 8 저장소에 포함되어 있지 않지만 공급업체 웹 사이트에서 다운로드할 수 있습니다.

루트 또는 sudo 사용자로 다음 wget 명령을 실행하여 certbot 스크립트를 /usr/local/bin 디렉토리에 다운로드합니다.

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

 

 

다운로드가 완료되면 파일을 다음과 같이 실행합니다.

sudo chmod +x /usr/local/bin/certbot-auto

 

 

 

강력한 DH(Diffie-Hellman) 그룹을 생성

DH(Diffie-Hellman 키 교환)는 보안되지 않은 통신 채널을 통해 암호화 키를 안전하게 교환하는 방법입니다. 보안을 강화하기 위해 새로운 2048비트 DH 매개변수 세트를 생성합니다.

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

 

최대 4096비트까지 크기를 변경할 수 있지만 시스템 엔트로피에 따라 생성이 30분 이상 걸릴 수 있습니다.

 

 

 

SSL 인증서를 암호화

도메인에 대한 SSL 인증서를 얻으려면 ${webroot-path}/잘 알려진/acme Challenge 디렉터리에서 요청한 도메인의 유효성을 검사하는 임시 파일을 만들어 작동하는 Webroot 플러그인을 사용합니다. Let's Encrypt 서버는 임시 파일에 HTTP 요청을 하여 요청된 도메인이 인증서봇이 실행되는 서버로 확인되는지 확인합니다.

설정을 보다 쉽게 하기 위해 .잘 알려진/acme 문제에 대한 모든 HTTP 요청을 /var/lib/lets 암호화라는 단일 디렉토리에 매핑할 것입니다.

다음 명령을 실행하여 디렉토리를 만들고 Apache 서버에 쓰기 가능하도록 합니다.

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp apache /var/lib/letsencrypt
sudo 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

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"

 

 

위의 조각은 Mozilla에서 권장하는 칩을 사용하고 있습니다. OCSP Stapling, HTTP Strict Transport Security(HSTS), DH 키를 사용하도록 설정하고 보안 중심 HTTP 헤더를 거의 시행하지 않습니다.

변경 내용을 적용하려면 Apache 구성을 다시 로드합니다.

sudo systemctl reload httpd

 

 

이제 웹루트 플러그인으로 certbot 스크립트를 실행하고 SSL 인증서 파일을 가져올 수 있습니다.

sudo /usr/local/bin/certbot-auto certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

# 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 2020-01-26. To obtain a new or tweaked
#    version of this certificate in the future, simply run certbot-auto
#    again. To non-interactively renew *all* of your certificates, run
#    "certbot-auto 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

 

 

이제 모든 것이 설정되었으므로 다음과 같이 도메인 가상 호스트 구성을 편집합니다.

# /etc/httpd/conf.d/example.com.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 /var/log/httpd/example.com-error.log
  CustomLog /var/log/httpd/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>

 

 

위의 구성은 HTTPS를 강제 적용하고 www에서 non-www 버전으로 리디렉션하고 있습니다. 또한 HTTP/2를 활성화하여 사이트를 더 빠르고 강력하게 만듭니다. 필요에 따라 구성을 자유롭게 조정할 수 있습니다.

Apache 서비스를 다시 시작합니다.

sudo systemctl restart httpd

 

 

이제 https://를 사용하여 웹 사이트를 열 수 있으며 녹색 잠금 아이콘이 표시됩니다.

SSL Labs Server 테스트를 사용하여 도메인을 테스트하면 아래와 같이 A+ 등급을 받게 됩니다.

Linux : CentOS 8 : Let's Encrypt 로 아파치 보호 방법, 예제, 명령어

 

 

 

SSL 인증서를 암호화하도록 자동 갱신

암호화의 인증서는 90일 동안 유효합니다. 인증서가 만료되기 전에 자동으로 갱신하기 위해 하루에 두 번 실행되는 크론 작업을 생성하고 만료 30일 전에 인증서를 자동으로 갱신합니다.

다음 명령을 실행하여 인증서를 갱신하고 Apache를 다시 시작하는 새 크론 작업을 생성합니다.

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null

 

 

갱신 프로세스를 테스트하려면 certbot 명령과 --dry-run 스위치를 차례로 사용합니다.

sudo /usr/local/bin/certbot-auto renew --dry-run

 

 

오류가 없으면 갱신 프로세스가 성공했음을 의미합니다.

이 튜토리얼에서는 Cent OS의 Let's Encrypt 클라이언트 certbot을 사용하여 도메인에 대한 SSL 인증서를 얻는 방법에 대해 설명했습니다. 또한 인증서를 사용하도록 Apache를 구성하고 인증서 자동 갱신을 위한 크론 작업을 설정하는 방법도 보여드렸습니다.

Certbot 스크립트에 대한 자세한 내용은 Certbot 설명서를 참조하십시오.

반응형