Wyszukiwanie w witrynie

Jak zainstalować certyfikat Let's Encrypt SSL, aby zabezpieczyć Apache na RHEL/CentOS 7/6


Rozszerzając ostatni samouczek Let's Encrypt dotyczący bezpłatnych certyfikatów SSL/TLS, w tym artykule zademonstrujemy, jak uzyskać i zainstalować bezpłatne certyfikaty SSL/TLS wydane przez Let's Encrypt Certificate Authority dla Apache< serwer WWW w CentOS/RHEL 7/6 i dystrybucjach Fedory.

Jeśli chcesz zainstalować Let’s Encrypt dla Apache na Debianie i Ubuntu, postępuj zgodnie z poniższym przewodnikiem:

Skonfiguruj Let's Encrypt, aby zabezpieczyć Apache na Debianie i Ubuntu

Testowanie przykładowego środowiska

Wymagania

  1. Zarejestrowana nazwa domeny z prawidłowymi rekordami A wskazującymi publiczny adres IP Twojego serwera.
  2. Serwer Apache zainstalowany z włączonym modułem SSL i włączonym hostingiem wirtualnym, jeśli hostujesz wiele domen lub subdomen.

Krok 1: Zainstaluj serwer WWW Apache

1. Jeśli nie jest jeszcze zainstalowany, demon httpd można zainstalować, wydając poniższe polecenie:

yum install httpd

2. Aby oprogramowanie Let’s encrypt działało z Apache, upewnij się, że moduł SSL/TLS jest zainstalowany, wydając poniższe polecenie:

yum -y install mod_ssl

3. Na koniec uruchom serwer Apache za pomocą następującego polecenia:

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

Krok 2: Zainstaluj certyfikat Let’s Encrypt SSL

4. Najprostszą metodą instalacji klienta Let's Encrypt jest klonowanie repozytorium github w systemie plików. Aby zainstalować git w swoim systemie, musisz włączyć repozytoria Epel za pomocą następującego polecenia.

yum install epel-release

5. Po dodaniu repozytoriów Epel do systemu, zainstaluj klienta git, uruchamiając poniższe polecenie:

yum install git

6. Teraz, kiedy już zainstalowałeś wszystkie zależności wymagane do obsługi Let's Encrypt, przejdź do katalogu /usr/local/ i rozpocznij pobieranie formularza klienta Let's Encrypt swoje oficjalne repozytorium Github za pomocą następującego polecenia:

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

Krok 3: Uzyskaj bezpłatny certyfikat Let’s Encrypt SSL dla Apache

7. Proces uzyskiwania bezpłatnego certyfikatu Let’s Encrypt dla Apache jest zautomatyzowany dla CentOS/RHEL dzięki wtyczce Apache.

Uruchommy polecenie skryptowe Let's Encrypt w celu uzyskania Certyfikatu SSL. Przejdź do katalogu instalacyjnego Let's Encrypt z /usr/local/letsencrypt i uruchom komendę letsencrypt-auto, podając opcję --apache i -d dla każdej subdomeny potrzebujesz certyfikatu.

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

8. Podaj adres e-mail, który będzie używany przez Let's Encrypt do odzyskiwania utraconego klucza lub otrzymywania pilnych powiadomień, i naciśnij Enter, aby kontynuować.

9. Zaakceptuj warunki licencji, naciskając klawisz Enter.

10. W systemie CentOS/RHEL domyślnie serwer Apache nie używa koncepcji oddzielania katalogów dla włączonych hostów od dostępnych (nieaktywnych) hostów jako Debian dystrybucja oparta na tym.

Ponadto hosting wirtualny jest domyślnie wyłączony. Instrukcja Apache, która określa nazwę serwera (ServerName), nie występuje w pliku konfiguracyjnym SSL.

Aby aktywować tę dyrektywę, Let's Encrypt poprosi Cię o wybranie wirtualnego hosta. Ponieważ nie znajduje żadnego dostępnego Vhosta, wybierz plik ssl.conf, który ma być automatycznie modyfikowany przez klienta Let's Encrypt i naciśnij Enter, aby kontynuować.

11. Następnie wybierz metodę Łatwa dla żądań HTTP i naciśnij Enter, aby przejść dalej.

12. Na koniec, jeśli wszystko poszło gładko, na ekranie powinien wyświetlić się komunikat z gratulacjami. Naciśnij Enter, aby zwolnić monit.

Otóż to! Pomyślnie wydałeś certyfikat SSL/TLS dla swojej domeny. Teraz możesz rozpocząć przeglądanie swojej witryny za pomocą protokołu HTTPS.

Krok 4: Przetestuj bezpłatnie szyfrowanie Let's Encrypt w domenie

13. Aby przetestować poprawność uzgadniania SSL/TLS Twojej domeny, odwiedź poniższy link i przetestuj swój certyfikat w swojej domenie.

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

14. Jeżeli w przeprowadzonych testach otrzymasz serię raportów dotyczących podatności Twojej domeny, to musisz pilnie naprawić te luki w zabezpieczeniach.

Ogólna ocena klasy C sprawia, że Twoja domena jest bardzo niebezpieczna. Aby rozwiązać te problemy z bezpieczeństwem, otwórz plik konfiguracyjny Apache SSL i wprowadź następujące zmiany:

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

Wyszukaj wiersz z instrukcją SSLProtocol i dodaj na końcu -SSLv3.

Wejdź głębiej w plik, wyszukaj i skomentuj linię za pomocą SSLCipherSuite, umieszczając przed nią # i dodaj następującą treść pod tą linią:

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. Po wprowadzeniu wszystkich powyższych zmian zapisz i zamknij plik, a następnie uruchom ponownie demona Apache, aby zastosować zmiany.

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

16. Teraz ponownie przetestuj stan szyfrowania swojej domeny, odwiedzając ten sam link, co powyżej. Aby przeprowadzić ponowne testy, kliknij łącze Wyczyść pamięć podręczną na stronie internetowej.

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

Teraz powinieneś uzyskać ogólną ocenę klasy A, co oznacza, że Twoja domena jest wysoce zabezpieczona.

Krok 4: Automatyczne odnawianie Zaszyfrujmy certyfikaty na Apache

17. Ta wersja beta oprogramowania Let's Encrypt udostępnia certyfikaty z datą wygaśnięcia po 90 dniach. Tak więc, aby odnowić certyfikat SSL, musisz ponownie wykonać polecenie letsencrypt-auto przed datą wygaśnięcia, z tymi samymi opcjami i flagami, które zostały użyte do uzyskania pierwotnego certyfikatu.

Poniżej przedstawiono przykład ręcznego odnowienia certyfikatu.

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

18. Aby zautomatyzować ten proces, utwórz następujący skrypt bash dostarczony przez githuba erikaheidi w katalogu /usr/local/bin/ z następującą treścią. (skrypt został nieco zmodyfikowany, aby odzwierciedlał nasz katalog instalacyjny letsencrypt).

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

Dodaj następującą treść do pliku 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. Przyznaj uprawnienia do wykonywania skryptu, zainstaluj pakiet bc i uruchom skrypt w celu jego przetestowania. Użyj nazwy domeny jako parametru pozycyjnego skryptu. Aby wykonać ten krok, wydaj poniższe polecenia:

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

20. Na koniec, korzystając z harmonogramu systemu Linux, dodaj nowe zadanie cron, aby uruchamiać skrypt co dwa miesiące, zapewniając aktualizację certyfikatu przed datą wygaśnięcia.

crontab -e

Dodaj następujący wiersz na dole pliku.


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

Otóż to! Twój serwer Apache działający na systemie CentOS/RHEL obsługuje teraz zawartość SSL przy użyciu bezpłatnego certyfikatu Let's Encrypt SSL.