Twaqqif ta' HTTPS b'Ejja Encrypt SSL Ċertifikat Għal Nginx fuq RHEL/CentOS 7/6


Wara s-serje ta' Let's Encrypt ta' qabel dwar Apache jew Nginx web server b'modulu SSL/TLS, dan l-artikolu ser niggwidawk dwar kif tiġġenera u tinstalla ċertifikat SSL/TLS miksub b'xejn minn Let's Encrypt Certificate Authority li se nkunu qed nużaw biex tiżgura tranżazzjonijiet HTTP tas-server tal-web Nginx fuq CentOS/RHEL 7/6 u distribuzzjoni Fedora.

Jekk qed tfittex li tinstalla Let's Encrypt għal Apache fuq distribuzzjonijiet RHEL/CentOS 7/6 u Fedora, segwi din il-gwida hawn taħt:

  1. Isem ta' dominju reġistrat b'rekords A DNS validi biex jindikaw lura lejn l-Indirizz IP pubbliku tas-server.
  2. Server tal-web Nginx installat b'SSL attivat u Hosts Virtwali attivati (biss għal oqsma multipli jew sottodominji hosting).

Pass 1: Installa Nginx Web Server

1. Fuq l-ewwel pass, f'każ li m'għandekx Nginx daemon diġà installat, agħti l-kmandi hawn taħt bi privileġġi ta 'l-għeruq sabiex tinstalla Nginx webserver mir-repożitorji Epel:

# yum install epel-release
# yum install nginx

Pass 2: Niżżel jew Ikklona Ħieles Ejja Kriptaġġ Ċertifikat SSL

2. L-iktar metodu mgħaġġel ta 'installazzjoni tal-klijent Let's Encrypt fuq sistemi Linux billi tikklona l-pakketti minn repożitorji github.

L-ewwel, installa git client fuq is-sistema bil-kmand hawn taħt:

# yum install git

3. Wara li l-klijent git ikun ġie installat, ibdel id-direttorju għal /opt path u iġbed Let's Encrypt software billi tħaddem il-kmandi hawn taħt:

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

Pass 3: Iġġenera Ċertifikat SSL Ejja Kriptaġġ Ħieles għal Nginx

4. Il-proċess tal-kisba ta 'Ċertifikat SSL/TLS b'xejn għal Nginx se jsir manwalment billi tuża plugin Let's Encrypt Standalone.

Dan il-metodu jeħtieġ li l-port 80 għandu jkun ħieles matul iż-żmien li l-klijent Let's Encrypt jivvalida l-identità tas-server u jiġġenera ċertifikati.

Allura, jekk Nginx diġà qed jaħdem, waqqaf id-daemon bil-kmand li ġej u ħaddem l-utilità ss biex tikkonferma li l-port 80 m'għadux jintuża fil-munzell tan-netwerk.

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

5. Issa wasal iż-żmien li tikseb Ċertifikat SSL b'xejn minn Let's Encrypt. Imxi fid-direttorju tal-installazzjoni Let's Encrypt, jekk m'intix diġà hemm, u mexxi l-kmand letsencrypt-auto bl-għażla certonly --standalone u -d bandiera għal kull dominju jew sottodominju li tixtieq tiġġenera ċertifikat kif issuġġerit fl-eżempju hawn taħt.

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

6. Wara li jiġu installati serje ta 'pakketti u dipendenzi fuq il-magna tiegħek, Let's Encrypt iġibek biex tidħol fil-kont tiegħek li se jintuża għall-irkupru taċ-ċavetta mitlufa jew notifiki urġenti.

7. Sussegwentement għandek taqbel mat-termini tal-liċenzja billi tagħfas Enter key.

8. Fl-aħħarnett, jekk kollox mar kif suppost, se jintwera messaġġ ta 'informazzjoni ta' congratulation fuq it-terminal bash tiegħek. Il-messaġġ se juri wkoll meta ċ-ċertifikat jiskadi.

Pass 4: Installa Let's Encrypt SSL Certificate f'Nginx

9. Issa li għandek Ċertifikat SSL/TLS b'xejn, wasal iż-żmien li tinstallah fis-server tal-web Nginx sabiex id-dominju tiegħek jużah.

Iċ-ċertifikati SSL ġodda kollha jitqiegħdu f'/etc/letsencrypt/live/ taħt direttorju msemmi wara l-isem tad-dominju tiegħek. Uża l-kmand ls biex telenka l-fajls taċ-Ċertifikat maħruġa għad-dominju tiegħek u identifikahom.

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

10. Biex tinstalla l-fajls taċ-ċertifikat f'Nginx u tippermetti SSL, iftaħ il-fajl /etc/nginx/nginx.conf għall-editjar u żid id-dikjarazzjonijiet hawn taħt wara l-aħħar linja ta 'smigħ mill-blokk tas-server. Uża l-illustrazzjoni hawn taħt bħala gwida.

# vi /etc/nginx/nginx.conf

Silta blokk Nginx SSL:

# 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';

Ibdel is-sekwenza tal-isem tad-dominju għaċ-ċertifikati SSL biex taqbel mad-dominju tiegħek.

11. Fl-aħħarnett, ibda mill-ġdid is-servizz Nginx u żur id-dominju tiegħek permezz tal-Protokoll HTTPS fuq https://yourdomain. Il-paġna għandha tagħbija bla xkiel, mingħajr ebda żball taċ-ċertifikat.

# systemctl restart nginx
# service nginx restart

12. Sabiex tivverifika ċ-ċertifikat SSL/TLS u d-dritta tiegħu żur il-link li ġejja:

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

13. F'każ li tirċievi notifika li s-server tiegħek jappoġġja skambju ta' ċavetta DH dgħajfa u klassifikazzjoni ġenerali ta' grad B, iġġenera ċifra Diffie-Hellman ġdida fid-direttorju /etc/nginx/ssl/ biex tipproteġi s-server tiegħek kontra l-attakk Logjam billi taħdem il-kmandi li ġejjin.

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

F'dan l-eżempju użajna ċavetta 4096 bit, li fil-fatt tieħu ħafna żmien biex tiġġenera u tpoġġi overhead żejda fuq is-server tiegħek u fuq l-handshake SSL.

F'każ li ma jkunx hemm bżonn espliċitu li tuża ċavetta għal dan it-tul u m'intix paranojku, għandek tkun sigur b'ċavetta 2048 bit.

14. Wara li ċ-ċavetta DH tkun ġiet iġġenerata, iftaħ il-fajl ta 'konfigurazzjoni Nginx u żid id-dikjarazzjonijiet ta' hawn taħt wara l-linja ssl_ciphers sabiex iżżid iċ-ċavetta DH u jgħolli l-livell tas-sigurtà tad-dominju tiegħek għal A+ grad.

# vi /etc/nginx/nginx.conf

Żid is-silta tal-blokk li ġejja għal 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. Ibda mill-ġdid is-servizz Nginx biex tapplika l-bidliet u terġa 'tittestja ċ-ċertifikat SSL tiegħek billi tneħħi l-cache tar-riżultat preċedenti mill-link imsemmi hawn fuq.

# systemctl restart nginx
# service nginx restart

Pass 5: Tiġġedded Auto Nginx Ħieles Ejja Encrypt Ċertifikati SSL

16. Let's Encrypt CA tirrilaxxa ċertifikati SSL/TLS b'xejn validi għal 90 jum. Iċ-ċertifikati jistgħu jiġġeddu u jiġu applikati manwalment qabel l-iskadenza bl-użu tal-plugin webroot, mingħajr ma twaqqaf is-server tal-web tiegħek, billi toħroġ il-kmandi hawn taħt:

# ./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

Meta tħaddem il-kmand ta 'hawn fuq kun żgur li tissostitwixxi l-webroot-path biex tqabbel l-għerq tad-dokument tas-server tal-web tiegħek, speċifikat mid-dikjarazzjoni tal-għeruq Nginx.

17. Sabiex iġġedded awtomatikament iċ-ċertifikat qabel ma jiskadi oħloq din l-iskrittura bash minn github erikaheidi fid-direttorju /usr/local/bin/ u żid il-kontenut ta’ hawn taħt (l-iskript huwa kemmxejn modifikat biex jirrifletti l-issettjar ta’ Nginx).

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

Żid il-linji li ġejjin fil-fajl cert-renew.

#!/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. Ibdel il-varjabbli $webpath mill-bidu ta 'l-iskrittura biex taqbel l-għerq tad-dokument Nginx tiegħek. Kun żgur li l-iscript huwa eżekutibbli u l-kalkulatur bc huwa installat fis-sistema tiegħek billi toħroġ il-kmandi li ġejjin.

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

Tista' tittestja l-iskript kontra d-dominju tiegħek billi toħroġ il-kmand li ġej:

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


19. Fl-aħħarnett, biex tmexxi l-proċess tat-tiġdid taċ-ċertifikat awtomatikament, żid xogħol cron ġdid biex tesegwixxi l-iskrittura kull ġimgħa sabiex taġġorna ċ-ċertifikat fi żmien 30 jum qabel id-data ta 'skadenza.

# crontab -e

Żid il-linja li ġejja fil-qiegħ tal-fajl.

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

Dak kollox! Issa s-server Nginx jista 'jwassal kontenut tal-web sigur b'ċertifikat SSL/TLS Ejja Encrypt b'xejn fuq il-websajt tiegħek.