HTTPS nustatymas naudojant „Nginx“ SSL sertifikatą „RHEL/CentOS 7/6“


Laikydamiesi anksčiau „Encrypt“ serijų, susijusių su „Apache“ arba „Nginx“ žiniatinklio serveriu su SSL/TLS moduliu, šiame straipsnyje mes jums paaiškinsime, kaip sukurti ir įdiegti SSL/TLS sertifikatą, gautą nemokamai iš „Encrypt Certificate Authority“, kurį naudosime norint užtikrinti „Nginx“ tinklo serverio HTTP operacijas naudojant „CentOS/RHEL 7/6“ ir „Fedora“ paskirstymą.

Jei norite įdiegti „Let’s Encrypt for Apache“ RHEL/CentOS 7/6 ir „Fedora“ paskirstymuose, vadovaukitės toliau pateiktu vadovu:

  1. Užregistruotas domeno vardas su galiojančiais DNS įrašais, kad būtų galima nukreipti atgal į viešąjį serverio IP adresą.
  2. „Nginx“ žiniatinklio serveris, įdiegtas su įgalintu SSL ir įgalintais virtualiaisiais kompiuteriais (tik keliems domenams ar padomeniams).

1 žingsnis: įdiekite „Nginx“ tinklo serverį

1. Pirmiausia, jei dar neturite įdiegę „Nginx“ deemono, išduokite toliau nurodytas komandas su root teisėmis, kad galėtumėte įdiegti „Nginx“ tinklo serverį iš „Epel“ saugyklų:

# yum install epel-release
# yum install nginx

2 žingsnis: Atsisiųskite arba klonuokite nemokamai, šifruokime SSL sertifikatą

2. Greičiausias būdas įdiegti „Let’s Encrypt“ klientą „Linux“ sistemose klonuojant paketus iš „github“ saugyklų.

Pirmiausia įdiekite „git“ klientą sistemoje naudodami šią komandą:

# yum install git

3. Įdiegę „git“ klientą, pakeiskite katalogą į /opt kelią ir patraukite „Let's Encrypt“ programinę įrangą vykdydami šias komandas:

# cd /opt
# git clone https://github.com/letsencrypt/letsencrypt

3 žingsnis: sugeneruokite nemokamą „Nginx“ SSL sertifikatą

4. Nemokamo „Nginx“ SSL/TLS sertifikato gavimo procesas bus atliekamas rankiniu būdu, naudojant „Let’s Encrypt Standalone“ papildinį.

Šis metodas reikalauja, kad 80 prievadas turi būti laisvas tuo metu, kai „Let’s Encrypt“ klientas patvirtina serverio tapatybę ir sugeneruoja sertifikatus.

Taigi, jei „Nginx“ jau veikia, sustabdykite deemoną naudodami šią komandą ir paleiskite įrankį ss , kad įsitikintumėte, jog 80 prievadas nebenaudojamas tinklo kaupinyje.

# service nginx stop
# systemctl stop nginx
# ss -tln

5. Dabar atėjo laikas gauti nemokamą SSL sertifikatą iš „Let’s Encrypt“. Perkelkite į „Encrypt“ diegimo katalogą, jei dar nesate, ir paleiskite komandą letsencrypt-auto naudodami parinktį certonly --standalone ir -d vėliava kiekvienam domenui ar padomeniui, kuriam norite sukurti sertifikatą, kaip siūloma toliau pateiktame pavyzdyje.

# cd /opt
# ./letsencrypt-auto certonly --standalone -d your_domain.tld -d www.yourdomain.tld

6. Kai jūsų kompiuteryje bus įdiegta paketų ir priklausomybių serija, „Let’s Encrypt“ paragins įvesti savo sąskaitą, kuri bus naudojama prarastiems raktams atkurti ar skubiems pranešimams.

7. Tada turėtumėte susitarti dėl licencijos sąlygų paspausdami klavišą Enter.

8. Galiausiai, jei viskas vyko taip, kaip turėtų, jūsų bash terminale bus rodoma sveikinimo informacinė žinutė. Pranešimas taip pat bus rodomas, kai baigsis sertifikato galiojimo laikas.

4 žingsnis: įdiekime „Encrypt SSL“ sertifikatą „Nginx“

9. Dabar, kai turite nemokamą SSL/TLS sertifikatą, laikas jį įdiegti „Nginx“ tinklo serveryje, kad jūsų domenas galėtų juo naudotis.

Visi nauji SSL sertifikatai dedami į /etc/letsencrypt/live/ po katalogu, pavadintu jūsų domeno vardu. Naudokite komandą ls, kad išvardytumėte domenui išduotus sertifikato failus ir juos identifikuotumėte.

# sudo ls /etc/letsencrypt/live/
# sudo ls -al /etc/letsencrypt/live/your_domain.tld

10. Norėdami įdiegti sertifikato failus į „Nginx“ ir įgalinti SSL, atidarykite redagavimo failą /etc/nginx/nginx.conf ir pridėkite toliau pateiktus sakinius po paskutinės klausymo eilutės iš serverio bloko. Kaip vadovą naudokite žemiau pateiktą iliustraciją.

# vi /etc/nginx/nginx.conf

„Nginx“ SSL bloko ištrauka:

# SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

Pakeiskite SSL sertifikatų domeno vardo eilutę, kad ji atitiktų jūsų domeną.

11. Galiausiai iš naujo paleiskite „Nginx“ paslaugą ir apsilankykite savo domene naudodamiesi HTTPS protokolu adresu https:/yourdomain . Puslapis turėtų būti įkeltas sklandžiai, be klaidos pažymoje.

# systemctl restart nginx
# service nginx restart

12. Norėdami patikrinti SSL/TLS sertifikatą ir jo tiesumą, apsilankykite šioje nuorodoje:

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

13. Jei gausite pranešimą, kad jūsų serveris palaiko silpną DH raktų mainą ir bendrą B laipsnio reitingą, sugeneruokite naują „Diffie-Hellman“ šifrą kataloge/etc/nginx/ssl /, kad apsaugotumėte savo serverį nuo „Logjam“ atakos. vykdant šias komandas.

# mkdir /etc/nginx/ssl
# cd /etc/nginx/ssl
# openssl dhparam -out dhparams.pem 4096

Šiame pavyzdyje mes panaudojome 4096 bitų raktą, kurį sugeneruoti iš tikrųjų reikia daug laiko, o jūsų serveris ir SSL paspaudimas prideda papildomų pridėtinių išlaidų.

Jei nėra aiškaus poreikio naudoti raktą taip ilgai ir jūs nesate paranojiškas, turėtumėte būti saugūs naudodami 2048 bitų raktą.

14. Sugeneravus DH raktą, atidarykite „Nginx“ konfigūracijos failą ir pridėkite toliau pateiktus sakinius po eilute ssl_ciphers , kad pridėtumėte DH raktą ir pakeltumėte savo domeno saugos lygį į A + pažymys.

# vi /etc/nginx/nginx.conf

Pridėkite šią blokinę ištrauką prie Nginx.conf:

ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;

15. Iš naujo paleiskite „Nginx“ paslaugą, kad galėtumėte pritaikyti pakeitimus ir iš naujo išbandyti savo SSL sertifikatą, išvalydami ankstesnę rezultatų talpyklą iš aukščiau nurodytos nuorodos.

# systemctl restart nginx
# service nginx restart

5 žingsnis: automatinis „Nginx Free“ atnaujinimas leidžia šifruoti SSL sertifikatus

16. „Encrypt CA“ išleidžia nemokamus SSL/TLS sertifikatus, galiojančius 90 dienų. Sertifikatus galima rankiniu būdu atnaujinti ir pritaikyti jiems pasibaigus, naudojant „Webroot“ papildinį, nestabdant žiniatinklio serverio, išduodant šias komandas:

# ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/usr/share/nginx/html/ -d yourdomain.tld -d www.yourdomain.tld
# systemctl reload nginx

Vykdydami pirmiau nurodytą komandą, įsitikinkite, kad pakeitėte webroot-path , kad atitiktų jūsų tinklo serverio dokumento šaknį, nurodytą Nginx root sakinyje.

17. Norėdami automatiškai atnaujinti sertifikatą iki jo galiojimo pabaigos, sukurkite šį „bash“ scenarijų iš „github erikaheidi“ kataloge/usr/local/bin/directory ir pridėkite žemiau esantį turinį (scenarijus šiek tiek modifikuotas, kad atspindėtų „Nginx“ nustatymą).

# vi /usr/local/bin/cert-renew

Pridėkite šias eilutes prie failo cert-atnaujinti .

#!/bin/bash

webpath='/usr/share/nginx/html/'
domain=$1
le_path='/opt/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 -a webroot --agree-tos --renew-by-default --webroot-path=”$webpath” --domains "${domain_list}"
        echo "Reloading Nginx..."
sudo systemctl reload nginx
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

18. Pakeiskite $webpath kintamąjį nuo scenarijaus pradžios, kad jis atitiktų jūsų „Nginx“ dokumento šaknį. Įsitikinkite, kad scenarijus yra vykdomas ir skaičiuoklė bc yra įdiegta jūsų sistemoje, pateikdami šias komandas.

# chmod +x /usr/local/bin/cert-renew
# yum install bc

Galite išbandyti scenarijų pagal savo domeną pateikdami šią komandą:

# /usr/local/bin/cert-renew yourdomain.tld


19. Galiausiai, jei norite automatiškai paleisti sertifikato atnaujinimo procesą, pridėkite naują „cron“ užduotį, kad scenarijus būtų vykdomas kiekvieną savaitę, kad atnaujintumėte sertifikatą per 30 dienų iki galiojimo pabaigos datos.

# crontab -e

Failo apačioje pridėkite šią eilutę.

@weekly  /usr/local/bin/cert-renew your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

Tai viskas! Dabar „Nginx“ serveris gali pateikti saugų interneto turinį naudodamas nemokamą SSL/TLS „Encrypt“ sertifikatą savo svetainėje.