Kako instalirati Let's Encrypt SSL certifikat za siguran Apache na RHEL/CentOS 7/6


Proširujući posljednji vodič za Let's Encrypt u vezi s besplatnim SSL/TLS certifikatima, u ovom članku ćemo pokazati kako dobiti i instalirati besplatne SSL/TLS certifikate koje izdaje Let's Encrypt Certificate Authority za Apache< web server na CentOS/RHEL 7/6 i Fedora distribucijama.

Ako želite instalirati Let’s Encrypt za Apache na Debian i Ubuntu, slijedite ovaj vodič u nastavku:

Postavite Let’s Encrypt za siguran Apache na Debian i Ubuntu

Testiranje uzorka okruženja

Zahtjevi

  1. Registrirano ime domene s važećim A zapisima koji upućuju na javnu IP adresu vašeg servera.
  2. Apache server je instaliran s omogućenim SSL modulom i virtualnim hostingom u slučaju da hostirate više domena ili poddomena.

Korak 1: Instalirajte Apache Web Server

1. Ako već nije instaliran, httpd demon se može instalirati izdavanjem donje naredbe:

yum install httpd

2. Da bi Let’s encrypt softver radio sa Apacheom, uvjerite se da je SSL/TLS modul instaliran izdavanjem naredbe ispod:

yum -y install mod_ssl

3. Konačno, pokrenite Apache server sa sljedećom komandom:

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

Korak 2: Instalirajte Let’s Encrypt SSL certifikat

4. Najjednostavniji način instaliranja klijenta Let’s Encrypt je kloniranje github repozitorija u vašem sistemu datoteka. Da biste instalirali git na vaš sistem, morate omogućiti Epel repozitorije sa sljedećom naredbom.

yum install epel-release

5. Kada se Epel repos dodaju u vaš sistem, nastavite i instalirajte git klijent pokretanjem naredbe ispod:

yum install git

6. Sada, nakon što ste instalirali sve potrebne zavisnosti da biste se bavili Let's Encrypt, idite na /usr/local/ direktorij i počnite povlačiti obrazac Let's Encrypt klijenta njegovo službeno github spremište sa sljedećom naredbom:

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

Korak 3: Nabavite besplatni Let’s Encrypt SSL certifikat za Apache

7. Proces dobijanja besplatnog Let’s Encrypt sertifikata za Apache je automatizovan za CentOS/RHEL zahvaljujući dodatku za apache.

Pokrenimo naredbu skripte Let’s Encrypt kako bismo dobili SSL certifikat. Idite na instalacijski direktorij Let's Encrypt sa /usr/local/letsencrypt i pokrenite naredbu letsencrypt-auto pružanjem opcije --apache i -d zastavica za svaki poddomen za koji vam je potreban certifikat.

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

8. Navedite adresu e-pošte koju će Let’s Encrypt koristiti za oporavak vašeg izgubljenog ključa ili za hitna obavještenja i pritisnite Enter za nastavak.

9. Prihvatite uslove licence pritiskom na tipku Enter.

10. Na CentOS/RHEL, prema zadanim postavkama, Apache server ne koristi koncept odvajanja direktorija za omogućene hostove od dostupnih (neaktivnih) hostova kao Debian zasnovana distribucija do.

Takođe, virtuelni hosting je podrazumevano onemogućen. Apache izjava koja specificira ime servera (ServerName) nije prisutna u SSL konfiguracijskoj datoteci.

Da biste aktivirali ovu direktivu, Let’s Encrypt će od vas zatražiti da odaberete virtualni host. Budući da ne nalazi Vhost dostupan, odaberite datoteku ssl.conf koju će automatski mijenjati Let’s Encrypt klijent i pritisnite Enter za nastavak.

11. Zatim odaberite Jednostavnu metodu za HTTP zahtjeve i pritisnite Enter da krenete naprijed.

12. Konačno, ako je sve prošlo glatko, na ekranu bi se trebala prikazati poruka čestitke. Pritisnite Enter da otpustite upit.

To je to! Uspješno ste izdali SSL/TLS certifikat za svoju domenu. Sada možete početi pregledavati svoju web stranicu koristeći HTTPS protokol.

Korak 4: Testirajte besplatnu Let’s Encrypt Encryption na domeni

13. Kako biste testirali ispravnost SSL/TLS rukovanja vaše domene, posjetite link ispod i testirajte svoj certifikat na svojoj domeni.

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

14. Ako dobijete niz izvještaja o ranjivosti vašeg domena u sprovedenim testovima, onda morate hitno popraviti te sigurnosne rupe.

Ukupna ocjena klase C čini vašu domenu vrlo nesigurnom. Da biste riješili ove sigurnosne probleme, otvorite Apache SSL konfiguracijsku datoteku i napravite sljedeće promjene:

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

Potražite red sa SSLProtocol izrazom i dodajte -SSLv3 na kraj reda.

Idite dublje u datoteku, pretražite i komentirajte red sa SSLCipherSuite tako što ćete staviti # ispred njega i dodati sljedeći sadržaj ispod ovog reda:

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. Nakon što izvršite sve gore navedene promjene, sačuvajte i zatvorite datoteku, a zatim ponovo pokrenite Apache demon da biste primijenili promjene.

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

16. Sada ponovo testira status šifriranja vaše domene, tako što ćete posjetiti isti link kao gore. Da biste izvršili ponovne testove, kliknite na vezu Obriši keš sa web stranice.

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

Sada biste trebali dobiti ukupnu ocjenu klase A, što znači da je vaša domena visoko zaštićena.

Korak 4: Automatsko obnavljanje Let’s Encrypt certifikata na Apacheu

17. Ova beta verzija softvera Let’s Encrypt objavljuje certifikate s datumom isteka nakon 90 dana. Dakle, da biste obnovili SSL certifikat, morate ponovo izvršiti naredbu letsencrypt-auto prije datuma isteka, s istim opcijama i oznakama koje se koriste za dobivanje početnog certifikata.

U nastavku je prikazan primjer kako ručno obnoviti certifikat.

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

18. Da automatizujete ovaj proces, kreirajte sledeću bash skriptu koju obezbeđuje github erikaheidi, u /usr/local/bin/ direktorijumu sa sledećim sadržajem. (skripta je malo izmijenjena da odražava naš letsencrypt instalacijski direktorij).

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

Dodajte sljedeći sadržaj u datoteku 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. Dajte dozvole za izvršavanje za skriptu, instalirajte bc paket i pokrenite skriptu kako biste je testirali. Koristite ime svoje domene kao pozicioni parametar za skriptu. Izdajte donje naredbe da izvršite ovaj korak:

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

20. Konačno, koristeći Linux raspoređivanje, dodajte novi cron posao kako biste pokrenuli skriptu svaka dva mjeseca, osiguravajući da će vaš certifikat biti ažuriran prije isteka roka.

crontab -e

Dodajte sljedeći red na dno datoteke.


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

To je to! Vaš Apache server koji radi na CentOS/RHEL sistemu sada opslužuje SSL sadržaj koristeći besplatni Let’s Encrypt SSL certifikat.