RHEL/CentOS 7/6-da Nginx üçin SSL şahadatnamasyny şifrlemek bilen HTTPS gurmak


SSL/TLS moduly bilen Apache ýa-da Nginx web serweri bilen baglanyşykly şifrlemek seriýasyna eýerip, bu makala, ulanjak Şifrlemek şahadatnamamyzdan mugt alnan SSL/TLS şahadatnamasyny nädip döretmelidigi we guruljakdygy barada size maglumat bereris. CentOS/RHEL 7/6 we Fedora paýlanyşynda Nginx web serweri HTTP amallaryny üpjün etmek.

RHEL/CentOS 7/6 we Fedora paýlamalarynda Apache for Encrypt gurmak isleýän bolsaňyz, aşakdaky gollanmany ýerine ýetiriň:

  1. Serweriň umumy IP adresine yza gaýtarmak üçin dogry DNS ýazgylary bilen hasaba alnan domen ady.
  2. SSL bilen gurlan we Wirtual Hostlar işjeňleşdirilen Nginx web serweri (diňe birnäçe domen ýa-da subdomain hosting üçin).

1-nji ädim: Nginx web serwerini guruň

1. Birinji ädimde, eýýäm Nginx daemon gurulmadyk bolsa, Epel ammarlaryndan Nginx web serwerini gurmak üçin aşakdaky buýruklary kök aýratynlyklary bilen beriň:

# yum install epel-release
# yum install nginx

2-nji ädim: SSL şahadatnamasyny göçürip alalyň ýa-da klonlaň

2. “Github” ammarlaryndan paketleri klonlamak arkaly “Linux Encrypt” müşderisini Linux ulgamlarynda gurmagyň iň çalt usuly.

Ilki bilen, aşakdaky buýruk bilen ulgamda git müşderisini guruň:

# yum install git

3. Git müşderisi gurlansoň, katalogy /opt ýoluna üýtgediň we aşakdaky buýruklary işledip, Geliň şifrlemek programmasyny çekiň:

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

3-nji ädim: Nginx üçin mugt şifrlenen SSL şahadatnamasyny dörediň

4. Nginx üçin mugt SSL/TLS şahadatnamasyny almak prosesi “Let Encrypt Standalone” pluginini ulanmak arkaly el bilen amala aşyrylar.

Bu usul, “Encrypt” müşderisiniň serweriň şahsyýetini tassyklaýan we şahadatnamalary döredýän wagtynda 80-nji portuň mugt bolmalydygyny talap edýär.

Şeýlelik bilen, Nginx eýýäm işleýän bolsa, aşakdaky buýrugy bilen daemony duruzyň we 80-nji portuň torda ulanylmaýandygyny tassyklamak üçin ss kömekçi programmasyny işlediň.

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

5. Indi “Geliň şifrlemek” -den mugt SSL şahadatnamasyny almagyň wagty geldi. Gurmak bukjasyny şifrläliň, eger ol ýerde ýok bolsaňyz we letsencrypt-auto buýrugyny sertifikatly - standalone opsiýasy we -d aşakdaky mysalda görkezilişi ýaly şahadatnama döretmek isleýän her bir domen ýa-da kiçi domen üçin baýdak.

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

6. Enjamyňyza birnäçe paket we garaşlylyk gurlandan soň, Geliň şifrlemek, açary dikeltmek ýa-da gyssagly habarnamalar üçin ulanyljak hasabyňyzy girizmegiňizi sorar.

7. Ondan soň Enter düwmesini basyp ygtyýarnama şertlerine razy bolmaly.

8. Netijede, hemme zat bolmalysy ýaly giden bolsa, baş terminalyňyzda gutlag maglumatlary görkeziler. Şahadatnamanyň haçan gutarjakdygy habar hem görkeziler.

4-nji ädim: Geliň, Nginx-de SSL şifrlemek şahadatnamasyny guruň

9. Indi mugt SSL/TLS şahadatnamasyna eýe bolanyňyzdan soň, domeniňizi ulanmagy üçin ony Nginx web serwerine gurmagyň wagty geldi.

Newhli täze SSL şahadatnamalary domen adyňyzyň adyndaky katalogda /etc/letsencrypt/live/ ýerleşdirildi. Domeniňiz üçin berlen Sertifikat faýllaryny sanamak we olary kesgitlemek üçin ls buýrugyny ulanyň.

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

10. Nginx-de şahadatnama faýllaryny gurmak we SSL-i işletmek üçin /etc/nginx/nginx.conf faýlyny redaktirlemek üçin açyň we serwer blokundan soňky diňleýiş setirinden soň aşakdaky jümleleri goşuň. Aşakdaky suraty gollanma hökmünde ulanyň.

# vi /etc/nginx/nginx.conf

Nginx SSL blok bölegi:

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

SSL şahadatnamalary üçin öz domeniňize gabat gelmek üçin domen adynyň setirini çalyşyň.

11. Netijede, Nginx hyzmatyny täzeden açyň we https:/yourdomain salgysynda HTTPS Protokoly arkaly domeniňize giriň. Sahypa hiç hili şahadatnama ýalňyşlygy bolmazdan rahat bolmaly.

# systemctl restart nginx
# service nginx restart

12. SSL/TLS şahadatnamasyny we dogrulygyny barlamak üçin aşakdaky baglanyşyga giriň:

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

13. Serweriňiziň gowşak DH açar çalşygyny we B derejesiniň umumy bahasyny goldaýandygy barada habar alsaňyz, serweriňizi Logjam hüjüminden goramak üçin/etc/nginx/ssl/katalogda täze Diffie-Hellman şifrini dörediň. aşakdaky buýruklary işletmek.

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

Bu mysalda, 4096 bit açaryny ulandyk, bu hakykatdanam serweriňize we SSL el çarpyşmasy üçin goşmaça ýer goýmak üçin köp wagt alýar.

Bu açary uzak wagtlap ulanmagyň aç-açan zerurlygy ýok bolsa we paranoid däl bolsaňyz, 2048 bit açary bilen howpsuz bolmaly.

14. DH açary döredilenden soň, DH düwmesini goşmak we domeniňiziň howpsuzlyk derejesini A + <ýokarlandyrmak üçin ssl_ciphers setirinden soň aşakdaky jümleleri goşuň./kod> dereje

# vi /etc/nginx/nginx.conf

Nginx.conf-a aşakdaky blok böleklerini goşuň:

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. Üýtgeşmeleri ulanmak we öňki netije keşini ýokarda görkezilen baglanyşykdan arassalamak bilen Nginx hyzmatyny täzeden açyň.

# systemctl restart nginx
# service nginx restart

5-nji ädim: Nginx mugt SSL şahadatnamalaryny şifrlemäge mümkinçilik berýär

16. Geliň, şifrlemek CA 90 günüň dowamynda mugt SSL/TLS şahadatnamalaryny çykaralyň. Şahadatnamalar, aşakdaky buýruklary bermek bilen, web serweriňizi saklamazdan, webroot plaginini ulanyp, el bilen täzelenip we ulanylyp bilner:

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

Aboveokardaky buýrugy ýerine ýetireniňizde, Nginx kök beýany bilen görkezilen web serwer resminama köküne gabat gelmek üçin webroot-path çalyşýandygyňyzy anyklaň.

17. Şahadatnamanyň möhleti gutarmanka awtomatiki täzelenmek üçin/usr/local/bin/katalogynda github erikaheidi-den bu baş skript dörediň we aşakdaky mazmuny goşuň (Nginx sazlamasyny görkezmek üçin birneme üýtgedilen skript).

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

cert-update faýlyna aşakdaky setirleri goşuň.

#!/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. Nginx resminama köküňize gabat gelmek üçin skriptiň başyndan $webpath üýtgeýjisini çalyşyň. Scriptazuwyň ýerine ýetirilýändigine we aşakdaky buýruklary bermek bilen ulgamyňyza bc kalkulýatorynyň gurnalandygyna göz ýetiriň.

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

Aşakdaky buýrugy bermek bilen skriptiňizi domeniňize synap bilersiňiz:

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


19. Netijede, şahadatnamanyň täzeleniş amalyny awtomatiki usulda işletmek üçin, şahadatnamanyň möhleti gutarýança 30 günüň dowamynda täzelenmek üçin her hepde skripti ýerine ýetirmek üçin täze bir iş goşuň.

# crontab -e

Faýlyň aşagyna aşakdaky setiri goşuň.

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

Bu hemmesi! Indi Nginx serweri, web sahypaňyzda mugt SSL/TLS Geliň şifrlemek şahadatnamasy bilen ygtybarly web mazmunyny berip biler.


Rightshli hukuklar goralandyr. © Linux-Console.net • 2019-2024