웹사이트 검색

RHEL/CentOS 7/6에서 Apache를 보호하기 위해 Let's Encrypt SSL 인증서를 설치하는 방법


SSL/TLS 무료 인증서에 관한 마지막 Let's Encrypt 자습서를 확장하여 이 문서에서는 Apache<에 대해 Let's Encrypt 인증 기관에서 발급한 무료 SSL/TLS 인증서를 얻고 설치하는 방법을 보여 드리겠습니다. CentOS/RHEL 7/6 및 Fedora 배포판의 웹 서버.

Debian 및 Ubuntu에 Let’s Encrypt for Apache를 설치하려면 아래 가이드를 따르세요.

Debian 및 Ubuntu에서 Apache를 보호하기 위해 Let's Encrypt 설정

샘플 환경 테스트

요구사항

  1. 서버 공용 IP 주소를 다시 가리키는 유효한 A 레코드가 있는 등록된 도메인 이름입니다.
  2. 여러 도메인이나 하위 도메인을 호스팅하는 경우 SSL 모듈이 활성화되고 가상 호스팅이 활성화된 Apache 서버가 설치됩니다.

1단계: Apache 웹 서버 설치

1. 아직 설치되지 않은 경우 아래 명령을 실행하여 httpd 데몬을 설치할 수 있습니다.

yum install httpd

2. Let's encrypt 소프트웨어가 Apache와 함께 작동하려면 아래 명령을 실행하여 SSL/TLS 모듈이 설치되어 있는지 확인하십시오.

yum -y install mod_ssl

3. 마지막으로 다음 명령을 사용하여 Apache 서버를 시작합니다.

systemctl start httpd.service          [On RHEL/CentOS 7]
service httpd start                    [On RHEL/CentOS 6]

2단계: Let's Encrypt SSL 인증서 설치

4. Let's Encrypt 클라이언트를 설치하는 가장 간단한 방법은 파일 시스템에서 github 저장소를 복제하는 것입니다. 시스템에 git을 설치하려면 다음 명령을 사용하여 Epel 저장소를 활성화해야 합니다.

yum install epel-release

5. Epel 저장소가 시스템에 추가되면 아래 명령을 실행하여 git 클라이언트를 설치하십시오.

yum install git

6. 이제 Let's Encrypt를 처리하기 위해 필요한 모든 종속성을 설치했으면 /usr/local/ 디렉토리로 이동하여 Let's Encrypt 클라이언트 양식 가져오기를 시작합니다. 다음 명령을 사용하여 공식 github 저장소를 확인하세요.

cd /usr/local/
git clone https://github.com/letsencrypt/letsencrypt

3단계: Apache용 무료 Let's Encrypt SSL 인증서 받기

7. Apache용 무료 Let's Encrypt 인증서를 얻는 과정은 Apache 플러그인 덕분에 CentOS/RHEL에서 자동화됩니다.

SSL 인증서를 얻기 위해 Let's Encrypt 스크립트 명령을 실행해 보겠습니다. /usr/local/letsencrypt에서 Let's Encrypt 설치 디렉터리로 이동하고 --apache 옵션과 를 제공하여 letsencrypt-auto 명령을 실행합니다. 인증서가 필요한 모든 하위 도메인에 대한-d 플래그입니다.

cd /usr/local/letsencrypt
./letsencrypt-auto --apache -d your_domain.tld 

8. Let’s Encrypt에서 분실한 키를 복구하거나 긴급 알림을 보내는 데 사용할 이메일 주소를 입력하고 Enter 키를 눌러 계속하세요.

9. Enter 키를 눌러 라이센스 조건에 동의합니다.

10. CentOS/RHEL에서 기본적으로 Apache 서버는 Debian으로 사용 가능한(비활성) 호스트에서 활성화된 호스트의 디렉토리를 분리하는 개념을 사용하지 않습니다. Strong> 기반 배포를 수행합니다.

또한 가상 호스팅은 기본적으로 비활성화되어 있습니다. 서버 이름(ServerName)을 지정하는 Apache 문은 SSL 구성 파일에 없습니다.

이 지시어를 활성화하기 위해 Let’s Encrypt는 가상 호스트를 선택하라는 메시지를 표시합니다. 사용 가능한 Vhost를 찾지 못했기 때문에 Let’s Encrypt 클라이언트가 자동으로 수정하도록 ssl.conf 파일을 선택하고 Enter를 눌러 계속합니다.

11. 그런 다음 HTTP 요청에 대해 쉬운 방법을 선택하고 Enter 키를 눌러 계속 진행합니다.

12. 마지막으로 모든 것이 순조롭게 진행되면 화면에 축하 메시지가 표시됩니다. 프롬프트를 해제하려면 Enter를 누르세요.

그게 다야! 귀하의 도메인에 대한 SSL/TLS 인증서가 성공적으로 발급되었습니다. 이제 HTTPS 프로토콜을 사용하여 웹사이트 탐색을 시작할 수 있습니다.

4단계: 도메인의 암호화를 무료로 테스트해 보세요.

13. 도메인 SSL/TLS 핸드셰이크의 정확성을 테스트하려면 아래 링크를 방문하여 도메인에서 인증서를 테스트하세요.

https://www.ssllabs.com/ssltest/analyze.html

14. 실시된 테스트에서 도메인 취약점에 관한 일련의 보고서를 받으면 해당 보안 허점을 긴급하게 수정해야 합니다.

C 클래스의 전체 등급은 도메인을 매우 불안하게 만듭니다. 이러한 보안 문제를 해결하려면 Apache SSL 구성 파일을 열고 다음과 같이 변경하십시오.

vi /etc/httpd/conf.d/ssl.conf

SSLProtocol 문이 있는 줄을 검색하고 줄 끝에 -SSLv3를 추가하세요.

파일 더 깊이 들어가서 SSLCipherSuite로 줄 앞에 #를 배치하여 검색하고 주석을 달고 이 줄 아래에 다음 내용을 추가합니다.

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire

15. 위의 사항을 모두 변경한 후 파일을 저장하고 닫은 다음 Apache 데몬을 다시 시작하여 변경 사항을 적용하세요.

systemctl restart httpd.service          [On RHEL/CentOS 7]
service httpd restart                    [On RHEL/CentOS 6]

16. 이제 위와 동일한 링크를 방문하여 도메인 암호화 상태를 다시 테스트하세요. 재테스트를 수행하려면 웹사이트에서 캐시 지우기 링크를 누르세요.

https://www.ssllabs.com/ssltest/analyze.html 

이제 전체 등급 A를 받으셔야 합니다. 이는 귀하의 도메인이 매우 안전하게 보호되어 있음을 의미합니다.

4단계: 자동 갱신 Apache에서 인증서를 암호화합시다

17. Let’s Encrypt 소프트웨어의 베타 버전은 90일 이후 만료 날짜가 있는 인증서를 출시합니다. 따라서 SSL 인증서를 갱신하려면 만료 날짜 이전에 초기 인증서를 얻을 때 사용한 것과 동일한 옵션 및 플래그를 사용하여 letsencrypt-auto 명령을 다시 실행해야 합니다.

인증서를 수동으로 갱신하는 방법에 대한 예가 아래에 나와 있습니다.

cd /usr/local/letsencrypt
./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18. 이 프로세스를 자동화하려면 /usr/local/bin/ 디렉토리에 다음 콘텐츠가 포함된 github erikaheidi에서 제공하는 다음 bash 스크립트를 생성하세요. (Letsencrypt 설치 디렉터리를 반영하도록 스크립트가 약간 수정되었습니다).

vi /usr/local/bin/le-renew-centos

le-renew-centos 파일에 다음 내용을 추가합니다.

!/bin/bash

domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;

get_domain_list(){
        certdomain=$1
        config_file="$le_conf/renewal/$certdomain.conf"

        if [ ! -f $config_file ] ; then
                echo "[ERROR] The config file for the certificate $certdomain was not found."
                exit 1;
        fi

        domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
        last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')

        if [ "${last_char}" = "," ]; then
                domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
        fi

        echo $domains;
}

if [ -z "$domain" ] ; then
        echo "[ERROR] you must provide the domain name for the certificate renewal."
        exit 1;
fi

cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
        echo "[ERROR] certificate file not found for domain $domain."
        exit 1;
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
        echo "The certificate is up to date, no need for renewal ($days_exp days left)."
        exit 0;
else
        echo "The certificate for $domain is about to expire soon. Starting renewal request..."
        domain_list=$( get_domain_list $domain )
        "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19. 스크립트에 실행 권한을 부여하고 bc 패키지를 설치한 후 스크립트를 실행하여 테스트합니다. 도메인 이름을 스크립트의 위치 매개변수로 사용하세요. 이 단계를 수행하려면 아래 명령을 실행하십시오.

yum install bc
chmod +x /usr/local/bin/le-renew-centos
/usr/local/bin/le-renew-centos your_domain.tld

20. 마지막으로 Linux 예약을 사용하여 두 달마다 스크립트를 실행하도록 새 크론 작업을 추가하여 인증서가 만료 날짜 전에 업데이트되도록 합니다.

crontab -e

파일 맨 아래에 다음 줄을 추가합니다.


0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

그게 다야! CentOS/RHEL 시스템 위에서 실행되는 Apache 서버는 이제 무료 Let's Encrypt SSL 인증서를 사용하여 SSL 콘텐츠를 제공하고 있습니다.