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:
- Reģistrēts domēna nosaukums ar derīgu DNS ierakstu, lai norādītu uz servera publisko IP adresi.
- 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ē.