Kaip įdiegti „Let's Encrypt SSL“ sertifikatą, kad būtų apsaugotas „Apache“ RHEL/CentOS 7/6


Pratęsdami paskutinę „Let's Encrypt“ mokymo programą apie nemokamus SSL/TLS sertifikatus, šiame straipsnyje parodysime, kaip gauti ir įdiegti nemokamus SSL/TLS sertifikatus, kuriuos išdavė Encrypt Certificate Authority, skirtą Apache<. žiniatinklio serveris CentOS/RHEL 7/6 ir „Fedora“ paskirstymuose.

Jei norite įdiegti Let's Encrypt for Apache Debian ir Ubuntu, vadovaukitės šiuo vadovu:

„Debian“ ir „Ubuntu“ sistemose nustatykite „Let’s Encrypt to Secure Apache“.

Bandymo pavyzdinė aplinka

Reikalavimai

  1. Registruotas domeno vardas su galiojančiais A įrašais, nukreipinčiais atgal į jūsų serverio viešąjį IP adresą.
  2. Įdiegtas „Apache“ serveris su įjungtu SSL moduliu ir įjungtu virtualiuoju priegloba, jei priglobiate kelis domenus arba padomenius.

1 veiksmas: įdiekite „Apache“ žiniatinklio serverį

1. Jei dar neįdiegtas, httpd demonas gali būti įdiegtas išduodant toliau pateiktą komandą:

yum install httpd

2. Kad „Let’s encrypt“ programinė įranga veiktų su „Apache“, įsitikinkite, kad SSL/TLS modulis yra įdiegtas, išduodami toliau pateiktą komandą:

yum -y install mod_ssl

3. Galiausiai paleiskite „Apache“ serverį naudodami šią komandą:

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

2 veiksmas: įdiekite Let’s Encrypt SSL sertifikatą

4. Paprasčiausias būdas įdiegti Užšifruokime klientą yra klonuoti github saugyklą failų sistemoje. Norėdami įdiegti „git“ savo sistemoje, turite įjungti „Epel“ saugyklas naudodami šią komandą.

yum install epel-release

5. Į sistemą įtraukę „Epel“ atpirkimo sandorius, įdiekite „git“ klientą vykdydami toliau pateiktą komandą:

yum install git

6. Dabar , įdiegę visas reikalingas priklausomybes, kad galėtumėte susidoroti su Let's Encrypt, eikite į /usr/local/ katalogą ir pradėkite traukti kliento formą Let's Encrypt savo oficialią „github“ saugyklą su šia komanda:

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

3 veiksmas: gaukite nemokamą Let’s Encrypt SSL sertifikatą, skirtą Apache

7. Nemokamo „Let’s Encrypt“ sertifikato, skirto „Apache“, gavimo procesas automatizuotas naudojant CentOS/RHEL dėl „apache“ papildinio.

Paleiskite scenarijaus komandą Šifruokime, kad gautume SSL sertifikatą. Eikite į Let's Encrypt diegimo katalogą iš /usr/local/letsencrypt ir paleiskite komandą letsencrypt-auto, nurodydami parinktį --apache ir -d žyma kiekvienam padomeniui, kuriam reikalingas sertifikatas.

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

8. Pateikite el. pašto adresą, kurį naudos „Let's Encrypt“, kad atkurtumėte prarastą raktą arba skubius pranešimus, ir paspauskite Enter, kad tęstumėte.

9. Sutikite su licencijos sąlygomis paspausdami klavišą Enter.

10. Pagal numatytuosius nustatymus CentOS/RHEL „Apache“ serveris nenaudoja įgalintų prieglobų katalogų atskyrimo nuo galimų (neaktyvių) prieglobų koncepcijos kaip Debian pagrįstas platinimas.

Be to, pagal numatytuosius nustatymus virtualus priegloba yra išjungta. „Apache“ teiginys, nurodantis serverio pavadinimą (ServerName), jo nėra SSL konfigūracijos faile.

Norėdami suaktyvinti šią direktyvą, Let’s Encrypt paragins pasirinkti virtualų pagrindinį kompiuterį. Kadangi jis neranda jokio pasiekiamo „Vhost“, pasirinkite failą ssl.conf, kurį automatiškai pakeis „Let’s Encrypt“ klientas, ir paspauskite Enter, kad tęstumėte.

11. Tada pasirinkite Lengvąjį metodą HTTP užklausoms ir paspauskite Enter, kad pereitumėte į priekį.

12. Galiausiai, jei viskas klostėsi sklandžiai, ekrane turėtų būti rodomas sveikinimo pranešimas. Paspauskite Enter, kad paleistumėte raginimą.

Viskas! Sėkmingai išdavėte SSL/TLS sertifikatą savo domenui. Dabar galite pradėti naršyti svetainėje naudodami HTTPS protokolą.

4 veiksmas: išbandykite nemokamą domeno šifravimą

13. Norėdami patikrinti domeno SSL/TLS rankos paspaudimo teisingumą, spustelėkite toliau pateiktą nuorodą ir išbandykite sertifikatą savo domene.

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

14. Jei atlikdami bandymus gaunate daugybę pranešimų apie domeno pažeidžiamumą, turite skubiai ištaisyti šias saugos spragas.

Bendras C klasės įvertinimas daro jūsų domeną labai nesaugų. Norėdami išspręsti šias saugos problemas, atidarykite Apache SSL konfigūracijos failą ir atlikite šiuos pakeitimus:

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

Ieškokite eilutės naudodami teiginį SSLProtocol ir eilutės pabaigoje pridėkite -SSLv3.

Eikite į failą giliau, ieškokite ir komentuokite eilutę naudodami SSLCipherSuite, prieš ją įdėdami # ir po šia eilute pridėkite šį turinį:

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. Atlikę visus anksčiau nurodytus pakeitimus išsaugokite ir uždarykite failą, tada iš naujo paleiskite „Apache“ demoną, kad pritaikytumėte pakeitimus.

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

16. Dabar dar kartą patikrinkite domeno šifravimo būseną, apsilankę ta pačia nuoroda, kaip nurodyta aukščiau. Norėdami atlikti pakartotinius testus, spustelėkite nuorodą Išvalyti talpyklą svetainėje.

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

Dabar turėtumėte gauti bendrą A klasės įvertinimą, o tai reiškia, kad jūsų domenas yra labai apsaugotas.

4 veiksmas: automatinis atnaujinimas Užšifruokime sertifikatus „Apache“.

17. Ši „Let’s Encrypt“ programinės įrangos beta versija išleidžia sertifikatus, kurių galiojimo laikas baigiasi po 90 dienų. Taigi, norėdami atnaujinti SSL sertifikatą, prieš pasibaigiant galiojimo laikui turite dar kartą vykdyti komandą letsencrypt-auto su tomis pačiomis parinktimis ir vėliavėlėmis, kurios buvo naudojamos norint gauti pradinį sertifikatą.

Žemiau pateikiamas pavyzdys, kaip rankiniu būdu atnaujinti sertifikatą.

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

18. Norėdami automatizuoti šį procesą, kataloge /usr/local/bin/ sukurkite toliau pateiktą „bash“ scenarijų, pateiktą „github erikaheidi“, su tokiu turiniu. (scenarijus šiek tiek pakeistas, kad atspindėtų mūsų letsencrypt diegimo katalogą).

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

Pridėkite šį turinį prie le-renew-centos failo:

!/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. Suteikite scenarijaus vykdymo leidimus, įdiekite bc paketą ir paleiskite scenarijų, kad jį išbandytumėte. Naudokite savo domeno pavadinimą kaip scenarijaus padėties parametrą. Norėdami atlikti šį veiksmą, išduokite toliau pateiktas komandas:

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

20. Galiausiai, naudodami „Linux“ planavimą, pridėkite naują cron užduotį, kad scenarijus būtų paleistas kas du mėnesius, užtikrinant, kad jūsų sertifikatas bus atnaujintas nepasibaigus galiojimo laikui.

crontab -e

Pridėkite šią eilutę failo apačioje.


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

Viskas! Jūsų „Apache“ serveris, veikiantis sistemoje CentOS/RHEL, dabar aptarnauja SSL turinį naudodamas nemokamą „Let's Encrypt SSL“ sertifikatą.