HTTPS iestatīšana, šifrējot SSL sertifikātu Nginx RHEL/CentOS 7/6


Pēc iepriekš šifrētās sērijas attiecībā uz Apache vai Nginx tīmekļa serveri ar SSL/TLS moduli, šajā rakstā mēs palīdzēsim jums izveidot un instalēt SSL/TLS sertifikātu, kas bez maksas iegūts no Encrypt Certificate Authority, kuru izmantosim lai nodrošinātu Nginx tīmekļa servera HTTP darījumus ar CentOS/RHEL 7/6 un Fedora izplatīšanu.

Ja vēlaties instalēt Let’s Encrypt for Apache RHEL/CentOS 7/6 un Fedora izplatījumos, rīkojieties šādi:

  1. Reģistrēts domēna nosaukums ar derīgu DNS ierakstu, lai norādītu uz servera publisko IP adresi.
  2. Nginx tīmekļa serveris, kas instalēts ar iespējotu SSL un iespējotu virtuālos saimniekus (tikai vairāku domēnu vai apakšdomēnu mitināšanai).

1. darbība: instalējiet Nginx tīmekļa serveri

1. Pirmajā posmā, ja jums vēl nav instalēts Nginx dēmons, izdodiet tālāk norādītās komandas ar root tiesībām, lai instalētu Nginx tīmekļa serveri no Epel krātuvēm:

# yum install epel-release
# yum install nginx

2. darbība: lejupielādējiet vai klonējiet bez maksas, šifrēsim SSL sertifikātu

2. Ātrākā Let’s Encrypt klienta instalēšanas metode Linux sistēmās, klonējot pakas no github krātuvēm.

Vispirms instalējiet git klientu sistēmā ar šādu komandu:

# yum install git

3. Pēc git klienta instalēšanas nomainiet direktoriju uz /opt ceļu un velciet Let’s Encrypt programmatūru, izpildot šādas komandas:

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

3. darbība: ģenerējiet bezmaksas Let’s Encrypt SSL sertifikātu Nginx

4. Bezmaksas SSL/TLS sertifikāta iegūšanas process Nginx tiks veikts manuāli, izmantojot Let’s Encrypt Standalone spraudni.

Šī metode prasa, lai laikā, kad Let’s Encrypt client pārbauda servera identitāti un ģenerē sertifikātus, 80. porta jābūt brīvam.

Tātad, ja Nginx jau darbojas, pārtrauciet dēmonu ar šādu komandu un palaidiet ss utilītu, lai apstiprinātu, ka 80 ports vairs netiek izmantots tīkla kaudzē.

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

5. Tagad ir pienācis laiks iegūt bezmaksas SSL sertifikātu vietnē Let’s Encrypt. Pārejiet uz šifrēšanas instalācijas direktoriju, ja vēl neesat tur, un palaidiet komandu letsencrypt-auto ar opciju certonly --standalone un -d karodziņš katram domēnam vai apakšdomēnam, kuram vēlaties izveidot sertifikātu, kā ieteikts zemāk esošajā piemērā.

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

6. Pēc tam, kad datorā ir instalēta virkne pakotņu un atkarību, Let’s Encrypt liks jums ievadīt savu kontu, kas tiks izmantots zaudēto atslēgu atkopšanai vai steidzamiem paziņojumiem.

7. Pēc tam jums jāpiekrīt licences noteikumiem, nospiežot taustiņu Enter.

8. Visbeidzot, ja viss noritēja kā nākas, uz jūsu bash termināla tiks parādīts apsveikuma informācijas ziņojums. Ziņojums tiks parādīts arī tad, kad beigsies sertifikāta derīguma termiņš.

4. darbība: instalējiet Let’s Encrypt SSL Certificate in Nginx

9. Tagad, kad jums pieder bezmaksas SSL/TLS sertifikāts, ir pienācis laiks to instalēt Nginx tīmekļa serverī, lai jūsu domēns to varētu izmantot.

Visi jaunie SSL sertifikāti tiek ievietoti /etc/letsencrypt/live/ zem direktorija, kas nosaukts pēc jūsu domēna vārda. Izmantojiet komandu ls, lai uzskaitītu jūsu domēnam izsniegtos sertifikātu failus un tos identificētu.

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

10. Lai sertifikātu failus instalētu Nginx un iespējotu SSL, rediģēšanai atveriet failu /etc/nginx/nginx.conf un pievienojiet zemāk esošos apgalvojumus aiz pēdējās klausīšanās rindas no servera bloka. Izmantojiet zemāk redzamo ilustrāciju kā ceļvedi.

# vi /etc/nginx/nginx.conf

Nginx SSL bloka fragments:

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

Nomainiet domēna vārda virkni SSL sertifikātiem, lai tie atbilstu jūsu domēnam.

11. Visbeidzot restartējiet Nginx pakalpojumu un apmeklējiet savu domēnu, izmantojot HTTPS protokolu vietnē https:/yourdomain . Lapa ir jāielādē vienmērīgi, bez kļūdas sertifikātā.

# systemctl restart nginx
# service nginx restart

12. Lai pārbaudītu SSL/TLS sertifikātu un tā pareizību, apmeklējiet šo saiti:

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

13. Ja saņemat paziņojumu, ka jūsu serveris atbalsta vāju DH atslēgu apmaiņu un kopējo reitingu B pakāpe, ģenerējiet jaunu Diffie-Hellman šifru direktorijā/etc/nginx/ssl /, lai aizsargātu jūsu serveri pret Logjam izpildot šādas komandas.

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

Šajā piemērā mēs izmantojām 4096 bitu atslēgu, kuras ģenerēšana faktiski prasa ilgu laiku, un jūsu serverim un SSL rokasspiedienam tiek piešķirta papildu pieskaitāmā summa.

Gadījumā, ja nav skaidri jāizmanto atslēga tik ilgi un jums nav paranojas, jums vajadzētu būt drošam ar 2048 bitu atslēgu.

14. Kad DH atslēga ir izveidota, atveriet Nginx konfigurācijas failu un pēc rindas ssl_ciphers pievienojiet šādus apgalvojumus, lai pievienotu DH atslēgu un paaugstinātu sava domēna drošības līmeni A + pakāpe.

# vi /etc/nginx/nginx.conf

Pievienojiet šādu bloka fragmentu vietnei 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. Restartējiet pakalpojumu Nginx, lai lietotu izmaiņas un atkārtoti pārbaudītu SSL sertifikātu, notīrot iepriekšējo rezultātu kešatmiņu no iepriekš minētās saites.

# systemctl restart nginx
# service nginx restart

5. darbība: Nginx bezmaksas atjaunošana ļauj šifrēt SSL sertifikātus

16. Let's Encrypt CA izlaiž bezmaksas SSL/TLS sertifikātus, kas derīgi 90 dienas. Sertifikātus var manuāli atjaunot un lietot pirms derīguma termiņa beigām, izmantojot tīmekļa saknes spraudni, nepārtraucot tīmekļa servera darbību, izsniedzot šādas 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

Palaidot iepriekšminēto komandu, noteikti nomainiet webroot-path , lai tas atbilstu jūsu tīmekļa servera dokumenta saknei, kas norādīta ar Nginx saknes paziņojumu.

17. Lai automātiski atjaunotu sertifikātu pirms tā termiņa beigām, izveidojiet šo bash skriptu no github erikaheidi mapē/usr/local/bin/direktorijā un pievienojiet zemāk esošo saturu (skripts ir nedaudz modificēts, lai atspoguļotu Nginx iestatījumu).

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

Pievienojiet šādas rindiņas failam cert-atjaunot .

#!/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. Nomainiet $webpath mainīgo skripta sākumā, lai tas atbilstu jūsu Nginx dokumenta saknei. Pārliecinieties, vai skripts ir izpildāms, un kalkulators bc ir instalēts jūsu sistēmā, izsniedzot šādas komandas.

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

Skriptu varat pārbaudīt, salīdzinot ar savu domēnu, izsniedzot šādu komandu:

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


19. Visbeidzot, lai automātiski palaistu sertifikāta atjaunošanas procesu, pievienojiet jaunu cron darbu, lai skripts tiktu izpildīts katru nedēļu, lai sertifikātu atjauninātu 30 dienu laikā pirms derīguma termiņa beigām.

# crontab -e

Pievienojiet šādu rindiņu faila apakšdaļā.

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

Tas ir viss! Tagad Nginx serveris var nodrošināt drošu tīmekļa saturu, izmantojot bezmaksas SSL/TLS Let’s Encrypt sertifikātu jūsu vietnē.