Kako namestiti Lets Encrypt SSL potrdilo za zaščito Apache na RHEL/CentOS 7/6


V razširitvi zadnje vaje Let's Encrypt v zvezi z brezplačnimi potrdili SSL/TLS bomo v tem članku prikazali, kako pridobiti in namestiti brezplačna potrdila SSL/TLS, ki jih je izdal Let's Encrypt Certificate Authority za spletni strežnik Apache na CentOS/RHEL 7/6 in Fedora distribucije tudi.

Če želite namestiti Let’s Encrypt for Apache v Debian in Ubuntu, sledite spodnjim navodilom:

  1. Registrirano ime domene z veljavnimi zapisi A za usmerjanje nazaj na javni naslov IP vašega strežnika.
  2. Strežnik Apache, nameščen z omogočenim modulom SSL in omogočenim navideznim gostovanjem, če gostite več domen ali poddomen.

1. korak: Namestite spletni strežnik Apache

1. Če še ni nameščen, lahko demon httpd namestite z izdajo spodnjega ukaza:

# yum install httpd

2. Če želimo, da programska oprema za šifriranje deluje z Apachejem, zagotovite, da je modul SSL/TLS nameščen tako, da izdate spodnji ukaz:

# yum -y install mod_ssl

3. Na koncu zaženite strežnik Apache z naslednjim ukazom:

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

2. korak: Namestite šifrirajmo SSL potrdilo

4. Najenostavnejši način namestitve odjemalca Let’s Encrypt je kloniranje repozitorija github v vašem datotečnem sistemu. Če želite v svoj sistem namestiti git, morate omogočiti repozitorije Epel z naslednjim ukazom.

# yum install epel-release

5. Ko so v vašem sistemu dodani repoi Epel, nadaljujte in namestite git client tako, da zaženete spodnji ukaz:

# yum install git

6. Zdaj, ko ste namestili vse potrebne odvisnosti za reševanje Let's Encrypt, pojdite v imenik /usr/local/ in začnite vleči odjemalca Let's Encrypt iz njegovega uradnega repozitorija github z naslednjim ukaz:

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

3. korak: pridobite brezplačno šifrirano potrdilo SSL za Apache

7. Postopek pridobivanja brezplačnega certifikata Let's Encrypt za Apache je avtomatiziran za CentOS/RHEL zahvaljujoč vtičniku apache.

Zaženimo ukaz Let’s Encrypt script, da pridobimo potrdilo SSL. Odprite namestitveni imenik Let's Encrypt iz /usr/local/letsencrypt in zaženite ukaz letsencrypt-auto , tako da zagotovite možnost --apache in -d zastava za vsako poddomeno, ki jo potrebujete.

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

8. Navedite e-poštni naslov, ki ga bo Let’s Encrypt uporabil za obnovitev izgubljenega ključa ali za nujna obvestila in pritisnite Enter, da nadaljujete.

9. Dogovorite se o pogojih licence, tako da pritisnete tipko Enter.

10. V CentOS/RHEL privzeto strežnik Apache ne uporablja koncepta ločevanja imenikov za omogočene gostitelje od razpoložljivih (neaktivnih) gostiteljev, kot to počne distribucija na osnovi Debiana.

Poleg tega je navidezno gostovanje privzeto onemogočeno. Stavek Apache, ki določa ime strežnika (ServerName), ni v konfiguracijski datoteki SSL.

Za aktiviranje te direktive vas bo Let’s Encrypt pozval, da izberete navideznega gostitelja. Ker ne najde nobenega Vhosta na voljo, izberite datoteko ssl.conf , ki jo bo odjemalec Let’s Encrypt samodejno spremenil, in za nadaljevanje pritisnite Enter.

11. Nato izberite enostaven način za zahteve HTTP in pritisnite Enter, da se premaknete naprej.

12. Nazadnje, če je šlo vse gladko, bi moralo biti na zaslonu prikazano čestitko. Pritisnite Enter, da sprostite poziv.

To je to! Uspešno ste izdali potrdilo SSL/TLS za svojo domeno. Zdaj lahko brskate po svojem spletnem mestu s protokolom HTTPS.

4. korak: Preskusite brezplačno Šifrirajmo šifriranje v domeni

13. Če želite preizkusiti naravnost stiskanja domene SSL/TLS, obiščite spodnjo povezavo in preizkusite svoje potrdilo na svoji domeni.

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

14. Če v izvedenih preizkusih prejmete vrsto poročil o ranljivosti vaše domene, morate nujno popraviti te luknje v varnosti.

Splošna ocena razreda C naredi vašo domeno zelo negotovo. Če želite odpraviti te varnostne težave, odprite konfiguracijsko datoteko Apache SSL in izvedite naslednje spremembe:

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

Poiščite vrstico z izjavo SSLProtocol in dodajte -SSLv3 na koncu vrstice.

Pojdite globlje v datoteko, poiščite in komentirajte vrstico z SSLCipherSuite , tako da pred njo postavite # in pod to vrstico dodate naslednjo vsebino:

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. Ko izvedete vse zgornje spremembe, datoteko shranite in zaprite, nato znova zaženite demon Apache, da uveljavite spremembe.

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

16. Zdaj znova preizkusite stanje šifriranja domene, tako da obiščete isto povezavo kot zgoraj. Za izvedbo ponovnih preizkusov pritisnite povezavo Počisti predpomnilnik na spletnem mestu.

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

Zdaj bi morali dobiti splošno oceno razreda A, kar pomeni, da je vaša domena zelo zaščitena.

4. korak: Samodejno podaljšajmo šifriranje potrdil na Apache

17. Ta beta različica programske opreme Let’s Encrypt po 90 dneh izda potrdila z datumom veljavnosti. Torej, če želite podaljšati potrdilo SSL, morate pred datumom poteka znova izvesti ukaz letsencrypt-auto z enakimi možnostmi in zastavicami, ki ste jih uporabili za pridobitev začetnega potrdila.

Spodaj je predstavljen primer ročnega podaljšanja certifikata.

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

18. Če želite avtomatizirati ta postopek, v imeniku /usr/local/bin/ ustvarite naslednji bash skript, ki ga zagotavlja github erikaheidi, z naslednjo vsebino. (skript je nekoliko spremenjen, da odraža naš namestitveni imenik letsencrypt).

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

V datoteko le-renew-centos dodajte naslednjo vsebino:

!/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. Dodelite dovoljenja za izvajanje skripta, namestite paket bc in zaženite skript, da ga preizkusite. Uporabite svoje ime domene kot pozicijski parameter za skript. Za izvedbo tega koraka izdajte spodnje ukaze:

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

20. Nazadnje, z razporejanjem Linuxa dodajte novo opravilo cron, da boste lahko skript izvajali vsaka dva meseca in zagotovili, da bo vaše potrdilo posodobljeno pred datumom poteka.

# crontab -e

Na dnu datoteke dodajte naslednjo vrstico.

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š strežnik Apache, ki deluje na vrhu sistema CentOS/RHEL, zdaj streže vsebino SSL z brezplačnim potrdilom Let’s Encrypt SSL.