RHEL/CentOS 7/6-ൽ Nginx-നുള്ള SSL സർട്ടിഫിക്കറ്റ് എൻക്രിപ്റ്റ് ചെയ്യാം ഉപയോഗിച്ച് HTTPS സജ്ജീകരിക്കുന്നു


SSL/TLS മൊഡ്യൂളുള്ള Apache അല്ലെങ്കിൽ Nginx വെബ് സെർവറുമായി ബന്ധപ്പെട്ട മുൻ സീരീസ് എൻക്രിപ്റ്റ് ചെയ്യുക, ഈ ലേഖനം ഞങ്ങൾ ഉപയോഗിക്കുന്ന ലെറ്റ്സ് എൻക്രിപ്റ്റ് സർട്ടിഫിക്കറ്റ് അതോറിറ്റിയിൽ നിന്ന് സൗജന്യമായി ലഭിച്ച ഒരു SSL/TLS സർട്ടിഫിക്കറ്റ് എങ്ങനെ സൃഷ്ടിക്കാമെന്നും ഇൻസ്റ്റാൾ ചെയ്യാമെന്നും നിങ്ങളെ നയിക്കും. CentOS/RHEL 7/6, Fedora വിതരണത്തിൽ Nginx വെബ്uസെർവർ HTTP ഇടപാടുകൾ സുരക്ഷിതമാക്കാൻ.

നിങ്ങൾ RHEL/CentOS 7/6, Fedora വിതരണങ്ങൾ എന്നിവയിൽ അപ്പാച്ചെക്കായി നമുക്ക് എൻക്രിപ്റ്റ് ഇൻസ്റ്റാൾ ചെയ്യാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, ചുവടെയുള്ള ഈ ഗൈഡ് പിന്തുടരുക:

  1. സെർവർ പൊതു IP വിലാസത്തിലേക്ക് തിരികെ ചൂണ്ടിക്കാണിക്കാൻ സാധുവായ A DNS റെക്കോർഡുകളുള്ള ഒരു രജിസ്റ്റർ ചെയ്ത ഡൊമെയ്ൻ നാമം.
  2. എസ്എസ്എൽ പ്രവർത്തനക്ഷമമാക്കി വെർച്വൽ ഹോസ്റ്റുകൾ പ്രവർത്തനക്ഷമമാക്കിയ Nginx വെബ് സെർവർ ഇൻസ്റ്റാൾ ചെയ്തു (ഒന്നിലധികം ഡൊമെയ്uനുകൾക്കോ സബ്uഡൊമെയ്uനുകൾ ഹോസ്റ്റിംഗിനോ വേണ്ടി മാത്രം).

ഘട്ടം 1: Nginx വെബ് സെർവർ ഇൻസ്റ്റാൾ ചെയ്യുക

1. ആദ്യ ഘട്ടത്തിൽ, നിങ്ങൾക്ക് Nginx ഡെമൺ ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ലെങ്കിൽ, Epel റിപ്പോസിറ്ററികളിൽ നിന്ന് Nginx വെബ്uസെർവർ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് റൂട്ട് പ്രത്യേകാവകാശങ്ങളോടെ താഴെയുള്ള കമാൻഡുകൾ നൽകുക:

# yum install epel-release
# yum install nginx

ഘട്ടം 2: സൗജന്യമായി ഡൗൺലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ക്ലോൺ ചെയ്യുക നമുക്ക് SSL സർട്ടിഫിക്കറ്റ് എൻക്രിപ്റ്റ് ചെയ്യാം

2. ഗിത്തബ് റിപ്പോസിറ്ററികളിൽ നിന്നുള്ള പാക്കേജുകൾ ക്ലോൺ ചെയ്തുകൊണ്ട് ലിനക്സ് സിസ്റ്റങ്ങളിൽ ക്ലയന്റ് എൻക്രിപ്റ്റ് ചെയ്യാം.

ആദ്യം, താഴെ പറയുന്ന കമാൻഡ് ഉപയോഗിച്ച് സിസ്റ്റത്തിൽ git ക്ലയന്റ് ഇൻസ്റ്റാൾ ചെയ്യുക:

# yum install git

3. git ക്ലയന്റ് ഇൻസ്റ്റാൾ ചെയ്ത ശേഷം, ഡയറക്uടറി /opt പാത്തിലേക്ക് മാറ്റുക, താഴെ പറയുന്ന കമാൻഡുകൾ പ്രവർത്തിപ്പിച്ച് നമുക്ക് സോഫ്റ്റ്uവെയർ എൻക്രിപ്റ്റ് ചെയ്യാം:

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

ഘട്ടം 3: Nginx-നായി ഒരു സൗജന്യമായി ലെറ്റ്സ് എൻക്രിപ്റ്റ് SSL സർട്ടിഫിക്കറ്റ് സൃഷ്ടിക്കുക

4. എൻuജിuഎൻuഎക്uസിനായി ഒരു സൗജന്യ എസ്uഎസ്uഎൽ/ടിuഎൽuഎസ് സർട്ടിഫിക്കറ്റ് നേടുന്ന പ്രക്രിയ, ലെറ്റ്uസ് എൻuക്രിപ്റ്റ് സ്റ്റാൻuഡലോൺ പ്ലഗിൻ ഉപയോഗിച്ച് സ്വമേധയാ ചെയ്യപ്പെടും.

സെർവറിന്റെ ഐഡന്റിറ്റി സാധൂകരിക്കുകയും സർട്ടിഫിക്കറ്റുകൾ സൃഷ്ടിക്കുകയും ചെയ്യട്ടെ, ക്ലയന്റ് എൻക്രിപ്റ്റ് ചെയ്യുന്ന സമയത്ത് പോർട്ട് 80 സൗജന്യമായിരിക്കണമെന്ന് ഈ രീതി ആവശ്യപ്പെടുന്നു.

അതിനാൽ, Nginx ഇതിനകം പ്രവർത്തിക്കുകയാണെങ്കിൽ, ഇനിപ്പറയുന്ന കമാൻഡ് ഉപയോഗിച്ച് ഡെമൺ നിർത്തുക, നെറ്റ്uവർക്ക് സ്റ്റാക്കിൽ പോർട്ട് 80 ഉപയോഗത്തിലില്ലെന്ന് സ്ഥിരീകരിക്കാൻ ss യൂട്ടിലിറ്റി പ്രവർത്തിപ്പിക്കുക.

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

5. ലെറ്റ്സ് എൻക്രിപ്റ്റിൽ നിന്ന് ഒരു സൗജന്യ എസ്എസ്എൽ സർട്ടിഫിക്കറ്റ് നേടാനുള്ള സമയമാണിത്. നിങ്ങൾ ഇതിനകം അവിടെ ഇല്ലെങ്കിൽ ലെറ്റ്സ് എൻക്രിപ്റ്റ് ഇൻസ്റ്റലേഷൻ ഡയറക്uടറിയിലേക്ക് നീങ്ങുക, കൂടാതെ --standalone ഓപ്uഷനും -d< letsencrypt-auto കമാൻഡ് പ്രവർത്തിപ്പിക്കുക. ചുവടെയുള്ള ഉദാഹരണത്തിൽ നിർദ്ദേശിച്ചിരിക്കുന്നതുപോലെ നിങ്ങൾ ഒരു സർട്ടിഫിക്കറ്റ് സൃഷ്ടിക്കാൻ ആഗ്രഹിക്കുന്ന ഓരോ ഡൊമെയ്uനിനും ഉപഡൊമെയ്uനിനും ഫ്ലാഗ് ചെയ്യുക.

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

6. നിങ്ങളുടെ മെഷീനിൽ പാക്കേജുകളുടെയും ഡിപൻഡൻസികളുടെയും ഒരു പരമ്പര ഇൻസ്റ്റാൾ ചെയ്ത ശേഷം, നഷ്uടമായ കീ വീണ്ടെടുക്കലിനോ അടിയന്തിര അറിയിപ്പുകൾക്കോ ഉപയോഗിക്കുന്ന നിങ്ങളുടെ അക്കൗണ്ട് നൽകാൻ ലെറ്റ്uസ് എൻക്രിപ്റ്റ് നിങ്ങളോട് ആവശ്യപ്പെടും.

7. അടുത്തതായി എന്റർ കീ അമർത്തി ലൈസൻസ് നിബന്ധനകൾ നിങ്ങൾ അംഗീകരിക്കണം.

8. അവസാനമായി, എല്ലാം ശരിയായി നടന്നാൽ, നിങ്ങളുടെ ബാഷ് ടെർമിനലിൽ ഒരു അഭിനന്ദന വിവര സന്ദേശം കാണിക്കും. സർട്ടിഫിക്കറ്റ് കാലഹരണപ്പെടുമ്പോൾ സന്ദേശവും പ്രദർശിപ്പിക്കും.

ഘട്ടം 4: Nginx-ൽ SSL സർട്ടിഫിക്കറ്റ് എൻക്രിപ്റ്റ് ചെയ്യാം

9. ഇപ്പോൾ നിങ്ങൾക്ക് ഒരു സൗജന്യ SSL/TLS സർട്ടിഫിക്കറ്റ് ഉണ്ട്, നിങ്ങളുടെ ഡൊമെയ്uനിന് അത് ഉപയോഗിക്കുന്നതിന് Nginx വെബ്uസെർവറിൽ ഇത് ഇൻസ്റ്റാൾ ചെയ്യേണ്ട സമയമാണിത്.

എല്ലാ പുതിയ SSL സർട്ടിഫിക്കറ്റുകളും /etc/letsencrypt/live/ എന്നതിൽ നിങ്ങളുടെ ഡൊമെയ്uൻ നാമത്തിന്റെ പേരിലുള്ള ഒരു ഡയറക്uടറിക്ക് കീഴിൽ സ്ഥാപിച്ചിരിക്കുന്നു. നിങ്ങളുടെ ഡൊമെയ്uനിനായി നൽകിയിരിക്കുന്ന സർട്ടിഫിക്കറ്റ് ഫയലുകൾ ലിസ്റ്റ് ചെയ്യാനും അവ തിരിച്ചറിയാനും ls കമാൻഡ് ഉപയോഗിക്കുക.

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

10. Nginx-ൽ സർട്ടിഫിക്കറ്റ് ഫയലുകൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനും SSL പ്രവർത്തനക്ഷമമാക്കുന്നതിനും, എഡിറ്റിംഗിനായി /etc/nginx/nginx.conf ഫയൽ തുറന്ന് സെർവർ ബ്ലോക്കിൽ നിന്നുള്ള അവസാന ലിസൻ ലൈനിന് ശേഷം ചുവടെയുള്ള പ്രസ്താവനകൾ ചേർക്കുക. ഗൈഡായി താഴെയുള്ള ചിത്രം ഉപയോഗിക്കുക.

# vi /etc/nginx/nginx.conf

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

നിങ്ങളുടെ സ്വന്തം ഡൊമെയ്uനുമായി പൊരുത്തപ്പെടുന്നതിന് SSL സർട്ടിഫിക്കറ്റുകൾക്കായി ഡൊമെയ്ൻ നാമ സ്ട്രിംഗ് മാറ്റിസ്ഥാപിക്കുക.

11. അവസാനമായി, Nginx സേവനം പുനരാരംഭിച്ച് https://yourdomain എന്നതിൽ HTTPS പ്രോട്ടോക്കോൾ വഴി നിങ്ങളുടെ ഡൊമെയ്ൻ സന്ദർശിക്കുക. സർട്ടിഫിക്കറ്റ് പിശക് കൂടാതെ പേജ് സുഗമമായി ലോഡ് ചെയ്യണം.

# systemctl restart nginx
# service nginx restart

12. SSL/TLS സർട്ടിഫിക്കറ്റും അതിന്റെ നേർരേഖയും പരിശോധിക്കുന്നതിന് ഇനിപ്പറയുന്ന ലിങ്ക് സന്ദർശിക്കുക:

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

13. നിങ്ങളുടെ സെർവർ ഒരു ദുർബലമായ DH കീ എക്uസ്uചേഞ്ചിനെയും ബി ഗ്രേഡിന്റെ മൊത്തത്തിലുള്ള റേറ്റിംഗിനെയും പിന്തുണയ്uക്കുന്നു എന്ന അറിയിപ്പ് ലഭിക്കുകയാണെങ്കിൽ, ലോഗ്ജാം ആക്രമണത്തിൽ നിന്ന് നിങ്ങളുടെ സെർവറിനെ പരിരക്ഷിക്കുന്നതിന് /etc/nginx/ssl/ ഡയറക്uടറിയിൽ ഒരു പുതിയ Diffie-Hellman സൈഫർ സൃഷ്uടിക്കുക. ഇനിപ്പറയുന്ന കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കുന്നു.

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

ഈ ഉദാഹരണത്തിൽ ഞങ്ങൾ ഒരു 4096 ബിറ്റ് കീ ഉപയോഗിച്ചു, ഇത് യഥാർത്ഥത്തിൽ ജനറേറ്റുചെയ്യാൻ വളരെയധികം സമയമെടുക്കുകയും നിങ്ങളുടെ സെർവറിലും SSL ഹാൻഡ്uഷേക്കിലും അധിക ഓവർഹെഡ് നൽകുകയും ചെയ്യുന്നു.

ഇത്രയും കാലം ഒരു കീ ഉപയോഗിക്കേണ്ട ആവശ്യമില്ലെങ്കിൽ നിങ്ങൾ ഭ്രാന്തനല്ലെങ്കിൽ, നിങ്ങൾ 2048 ബിറ്റ് കീ ഉപയോഗിച്ച് സുരക്ഷിതരായിരിക്കണം.

14. DH കീ ജനറേറ്റ് ചെയ്uതതിന് ശേഷം, Nginx കോൺഫിഗറേഷൻ ഫയൽ തുറന്ന്, DH കീ ചേർക്കുന്നതിനും നിങ്ങളുടെ ഡൊമെയ്uനിന്റെ സുരക്ഷാ നില ഒരു A+< എന്നതിലേക്ക് ഉയർത്തുന്നതിനും വേണ്ടി ssl_ciphers ലൈനിന് ശേഷം താഴെയുള്ള പ്രസ്താവനകൾ ചേർക്കുക. /കോഡ്> ഗ്രേഡ്.

# vi /etc/nginx/nginx.conf

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. മാറ്റങ്ങൾ പ്രയോഗിക്കുന്നതിന് Nginx സേവനം പുനരാരംഭിക്കുകയും മുകളിൽ സൂചിപ്പിച്ച ലിങ്കിൽ നിന്ന് മുമ്പത്തെ ഫല കാഷെ മായ്uക്കുന്നതിലൂടെ നിങ്ങളുടെ SSL സർട്ടിഫിക്കറ്റ് വീണ്ടും പരിശോധിക്കുകയും ചെയ്യുക.

# systemctl restart nginx
# service nginx restart

ഘട്ടം 5: Nginx സൗജന്യമായി പുതുക്കുക SSL സർട്ടിഫിക്കറ്റുകൾ എൻക്രിപ്റ്റ് ചെയ്യാൻ അനുവദിക്കുന്നു

16. CA എൻക്രിപ്റ്റ് ചെയ്യാം 90 ദിവസത്തേക്ക് സാധുതയുള്ള സൗജന്യ SSL/TLS സർട്ടിഫിക്കറ്റുകൾ റിലീസ് ചെയ്യുന്നു. നിങ്ങളുടെ വെബ് സെർവർ നിർത്താതെ തന്നെ, വെബ്uറൂട്ട് പ്ലഗിൻ ഉപയോഗിച്ച് കാലഹരണപ്പെടുന്നതിന് മുമ്പ് സർട്ടിഫിക്കറ്റുകൾ സ്വമേധയാ പുതുക്കുകയും പ്രയോഗിക്കുകയും ചെയ്യാം, ഇനിപ്പറയുന്ന കമാൻഡുകൾ നൽകി:

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

മുകളിലുള്ള കമാൻഡ് പ്രവർത്തിപ്പിക്കുമ്പോൾ, Nginx റൂട്ട് സ്റ്റേറ്റ്uമെന്റ് വ്യക്തമാക്കിയ നിങ്ങളുടെ വെബ് സെർവർ ഡോക്യുമെന്റ് റൂട്ടുമായി പൊരുത്തപ്പെടുന്നതിന് നിങ്ങൾ webroot-path മാറ്റിസ്ഥാപിക്കുന്നുവെന്ന് ഉറപ്പാക്കുക.

17. സർട്ടിഫിക്കറ്റ് കാലഹരണപ്പെടുന്നതിന് മുമ്പ് യാന്ത്രികമായി പുതുക്കുന്നതിന്, /usr/local/bin/ ഡയറക്ടറിയിലെ github erikaheidi-ൽ നിന്ന് ഈ ബാഷ് സ്uക്രിപ്റ്റ് സൃഷ്uടിക്കുകയും ചുവടെയുള്ള ഉള്ളടക്കം ചേർക്കുകയും ചെയ്യുക (Nginx ക്രമീകരണം പ്രതിഫലിപ്പിക്കുന്ന സ്uക്രിപ്റ്റ് ഇത് ചെറുതായി പരിഷ്uക്കരിച്ചിരിക്കുന്നു).

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

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. നിങ്ങളുടെ Nginx ഡോക്യുമെന്റ് റൂട്ടുമായി പൊരുത്തപ്പെടുന്നതിന് സ്ക്രിപ്റ്റിന്റെ തുടക്കം മുതൽ $webpath വേരിയബിൾ മാറ്റിസ്ഥാപിക്കുക. ഇനിപ്പറയുന്ന കമാൻഡുകൾ നൽകി നിങ്ങളുടെ സിസ്റ്റത്തിൽ സ്ക്രിപ്റ്റ് എക്സിക്യൂട്ടബിൾ ആണെന്നും bc കാൽക്കുലേറ്റർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്നും ഉറപ്പാക്കുക.

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

ഇനിപ്പറയുന്ന കമാൻഡ് നൽകി നിങ്ങളുടെ ഡൊമെയ്uനിനെതിരെ നിങ്ങൾക്ക് സ്uക്രിപ്റ്റ് പരിശോധിക്കാം:

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


19. അവസാനമായി, സർട്ടിഫിക്കറ്റ് പുതുക്കൽ പ്രക്രിയ സ്വയമേവ പ്രവർത്തിപ്പിക്കുന്നതിന്, കാലഹരണപ്പെടുന്ന തീയതിക്ക് 30 ദിവസത്തിനുള്ളിൽ സർട്ടിഫിക്കറ്റ് അപ്uഡേറ്റ് ചെയ്യുന്നതിന് എല്ലാ ആഴ്uചയും സ്uക്രിപ്റ്റ് എക്uസിക്യൂട്ട് ചെയ്യുന്നതിന് ഒരു പുതിയ ക്രോൺ ജോബ് ചേർക്കുക.

# crontab -e

ഫയലിന്റെ ചുവടെ ഇനിപ്പറയുന്ന വരി ചേർക്കുക.

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

അത്രയേയുള്ളൂ! ഇപ്പോൾ Nginx സെർവറിന് ഒരു സൗജന്യ SSL/TLS ഉപയോഗിച്ച് സുരക്ഷിതമായ വെബ് ഉള്ളടക്കം നൽകാനാകും നിങ്ങളുടെ വെബ്സൈറ്റിൽ സർട്ടിഫിക്കറ്റ് എൻക്രിപ്റ്റ് ചെയ്യാം.