Kuweka HTTPS na Hebu Tusimbe Cheti cha SSL kwa Nginx kwenye RHEL/CentOS 7/6


Kufuatia mfululizo wa awali wa Hebu Tusimbe kuhusu Apache au seva ya wavuti ya Nginx yenye moduli ya SSL/TLS, makala haya tutakuongoza jinsi ya kutengeneza na kusakinisha cheti cha SSL/TLS kilichopatikana bila malipo kutoka kwa Mamlaka ya Cheti cha Let's Encrypt ambacho tutakuwa tukitumia. ili kupata miamala ya HTTP ya seva ya wavuti ya Nginx kwenye CentOS/RHEL 7/6 na usambazaji wa Fedora.

Ikiwa unatafuta kusakinisha Let's Encrypt for Apache kwenye RHEL/CentOS 7/6 na usambazaji wa Fedora, fuata mwongozo huu hapa chini:

  1. Jina la kikoa kilichosajiliwa chenye rekodi halali za A DNS ili kuelekeza kwenye Anwani ya IP ya umma ya seva.
  2. Seva ya wavuti ya Nginx imesakinishwa ikiwa na SSL iliyowezeshwa na Wapaji Pekee kuwashwa (kwa vikoa vingi tu au upangishaji wa vikoa vidogo).

Hatua ya 1: Sakinisha Seva ya Wavuti ya Nginx

1. Katika hatua ya kwanza, ikiwa huna daemon ya Nginx tayari iliyosakinishwa, toa amri zilizo hapa chini na upendeleo wa mizizi ili kusakinisha seva ya wavuti ya Nginx kutoka hazina za Epel:

# yum install epel-release
# yum install nginx

Hatua ya 2: Pakua au Clone Bure Hebu Tusimba Cheti cha SSL

2. Njia ya haraka sana ya kusakinisha mteja wa Let’s Encrypt kwenye mifumo ya Linux kwa kuunganisha vifurushi kutoka kwenye hazina za github.

Kwanza, sasisha mteja wa git kwenye mfumo na amri ifuatayo:

# yum install git

3. Baada ya mteja wa git kusakinishwa, badilisha saraka kuwa /opt njia na uvute programu ya Let's Encrypt kwa kutekeleza amri zilizo hapa chini:

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

Hatua ya 3: Tengeneza Cheti cha Bure cha Wacha Tusimbe kwa njia fiche ya SSL kwa Nginx

4. Mchakato wa kupata Cheti cha SSL/TLS bila malipo kwa Nginx utafanywa wewe mwenyewe kwa kutumia programu-jalizi ya Let's Encrypt Standalone.

Njia hii inahitaji kwamba port 80 lazima iwe bila malipo wakati mteja wa Let's Encrypt atakapothibitisha utambulisho wa seva na kutoa vyeti.

Kwa hivyo, ikiwa Nginx tayari inafanya kazi, simamisha daemoni kwa amri ifuatayo na uendeshe ss matumizi ili kuthibitisha kuwa bandari 80 haitumiki tena kwenye mrundikano wa mtandao.

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

5. Sasa ni wakati wa kupata Cheti cha SSL bila malipo kutoka kwa Let's Encrypt. Hamisha hadi Hebu Tusimbe saraka ya usakinishaji, ikiwa tayari haupo, na endesha amri ya letsencrypt-auto kwa chaguo la certonly --standalone na -d bendera kwa kila kikoa au kikoa kidogo unachotaka kutoa cheti kama inavyopendekezwa katika mfano ulio hapa chini.

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

6. Baada ya msururu wa vifurushi na vitegemezi kusakinishwa kwenye mashine yako, Let's Encrypt itakuomba uingize akaunti yako ambayo itatumika kwa uokoaji wa ufunguo uliopotea au arifa za dharura.

7. Kisha unapaswa kukubaliana na masharti ya leseni kwa kubonyeza kitufe cha Ingiza.

8. Hatimaye, ikiwa kila kitu kilikwenda kama inavyopaswa, ujumbe wa maelezo ya pongezi utaonyeshwa kwenye terminal yako ya bash. Ujumbe pia utaonyeshwa wakati cheti kitaisha.

Hatua ya 4: Sakinisha Hebu Tusimbe Cheti cha SSL katika Nginx

9. Kwa kuwa sasa unamiliki Cheti cha SSL/TLS bila malipo, ni wakati wa kukisakinisha kwenye seva ya wavuti ya Nginx ili kikoa chako kikitumia.

Vyeti vyote vipya vya SSL vimewekwa katika /etc/letsencrypt/live/ chini ya saraka iliyopewa jina la kikoa chako. Tumia ls amri kuorodhesha faili za Cheti zinazotolewa kwa kikoa chako na uzitambue.

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

10. Ili kusakinisha faili za cheti katika Nginx na kuwezesha SSL, fungua /etc/nginx/nginx.conf faili kwa ajili ya kuhariri na uongeze kauli zilizo hapa chini baada ya safu ya mwisho ya kusikiliza kutoka kwa kizuizi cha seva. Tumia kielelezo hapa chini kama mwongozo.

# vi /etc/nginx/nginx.conf

Nukuu ya block ya 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';

Badilisha mfuatano wa jina la kikoa kwa vyeti vya SSL ili ulingane na kikoa chako.

11. Hatimaye, anzisha upya huduma ya Nginx na utembelee kikoa chako kupitia Itifaki ya HTTPS kwenye https://yourdomain. Ukurasa unapaswa kupakia laini, bila hitilafu yoyote ya cheti.

# systemctl restart nginx
# service nginx restart

12. Ili kuthibitisha cheti cha SSL/TLS na unyofu wake tembelea kiungo kifuatacho:

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

13. Iwapo utapata arifa kwamba seva yako inatumia ubadilishanaji hafifu wa DH na ukadiriaji wa jumla wa daraja B, toa sifa mpya ya Diffie-Hellman katika saraka /etc/nginx/ssl/ ili kulinda seva yako dhidi ya shambulio la Logjam. kuendesha amri zifuatazo.

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

Katika mfano huu tumetumia kitufe cha 4096, ambacho huchukua muda mrefu kutengeneza na kuweka ziada kwenye seva yako na kupeana mkono kwa SSL.

Iwapo hakuna haja ya wazi ya kutumia ufunguo kwa muda mrefu na huna wasiwasi, unapaswa kuwa salama na ufunguo wa 2048.

14. Baada ya ufunguo wa DH kuzalishwa, fungua faili ya usanidi ya Nginx na uongeze taarifa hapa chini baada ya mstari wa ssl_ciphers ili kuongeza ufunguo wa DH na kuongeza kiwango cha usalama cha kikoa chako hadi A+ daraja.

# vi /etc/nginx/nginx.conf

Ongeza dondoo ifuatayo ya kizuizi kwa 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. Anzisha upya huduma ya Nginx ili kutekeleza mabadiliko na jaribu tena cheti chako cha SSL kwa kufuta akiba ya matokeo ya awali kutoka kwa kiungo kilichotajwa hapo juu.

# systemctl restart nginx
# service nginx restart

Hatua ya 5: Usasishe Nginx Kiotomatiki Huruhusu Kusimba Vyeti vya SSL kwa Njia Fiche

16. Let's Encrypt CA inatoa vyeti vya SSL/TLS bila malipo vinavyotumika kwa siku 90. Vyeti vinaweza kusasishwa na kutumiwa kabla ya kuisha kwa muda kwa kutumia programu-jalizi ya webroot, bila kusimamisha seva yako ya wavuti, kwa kutoa amri zilizo hapa chini:

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

Unapotumia amri iliyo hapo juu hakikisha umebadilisha webroot-path ili kulinganisha mzizi wa hati ya seva yako ya wavuti, iliyobainishwa na taarifa ya mzizi ya Nginx.

17. Ili kusasisha cheti kiotomatiki kabla hakijaisha tengeneza hati hii ya bash kutoka kwa github erikaheidi katika /usr/local/bin/ saraka na uongeze maudhui yaliyo hapa chini (hati imerekebishwa kidogo ili kuonyesha mpangilio wa Nginx).

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

Ongeza mistari ifuatayo kwenye faili ya cert-upya.

#!/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. Badilisha kigezo cha $webpath kutoka mwanzo wa hati ili kupatana na mzizi wa hati yako ya Nginx. Hakikisha hati inaweza kutekelezwa na kikokotoo cha bc kimesakinishwa kwenye mfumo wako kwa kutoa amri zifuatazo.

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

Unaweza kujaribu hati dhidi ya kikoa chako kwa kutoa amri ifuatayo:

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


19. Hatimaye, ili kuendesha mchakato wa kusasisha cheti kiotomatiki, ongeza kazi mpya ya cron ili kutekeleza hati kila wiki ili kusasisha cheti ndani ya siku 30 kabla ya tarehe ya mwisho wa matumizi.

# crontab -e

Ongeza mstari ufuatao chini ya faili.

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

Ni hayo tu! Sasa seva ya Nginx inaweza kuwasilisha maudhui salama ya wavuti kwa cheti cha bure cha SSL/TLS Hebu Tusimba kwa njia fiche kwenye tovuti yako.