Opsætning af HTTPS med Lad os kryptere SSL-certifikat til Nginx på RHEL/CentOS 7/6


Efter den tidligere Let's Encrypt-serie vedrørende Apache eller Nginx-webserver med SSL/TLS-modul, vil denne artikel guide dig om, hvordan du genererer og installerer et SSL/TLS-certifikat, der er opnået gratis fra Let's Encrypt Certificate Authority, som vi bruger for at sikre Nginx webserver HTTP-transaktioner på CentOS/RHEL 7/6 og Fedora distribution.

Hvis du ønsker at installere Lad os kryptere til Apache på RHEL/CentOS 7/6 og Fedora distributioner, skal du følge denne vejledning nedenfor:

  1. Et registreret domænenavn med gyldige A DNS-poster, der peger tilbage til serverens offentlige IP-adresse.
  2. Nginx-webserver installeret med SSL-aktiveret og virtuelle værter aktiveret (kun til flere domæner eller hosting af underdomæner).

Trin 1: Installer Nginx Web Server

1. På det første trin, hvis du ikke allerede har Nginx-dæmonen installeret, skal du udstede nedenstående kommandoer med rodrettigheder for at installere Nginx-webserver fra Epel-arkiver:

# yum install epel-release
# yum install nginx

Trin 2: Download eller klon gratis Lad os kryptere SSL-certifikat

2. Den hurtigste metode til at installere Lad os kryptere klienten på Linux-systemer ved at klone pakkerne fra github-arkiver.

Først skal du installere git-klienten på systemet med nedenstående kommando:

# yum install git

3. Når git-klienten er installeret, skal du ændre biblioteket til /opt -stien og trække Lad os kryptere softwaren ved at køre nedenstående kommandoer:

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

Trin 3: Generer et gratis Lad os kryptere SSL-certifikat til Nginx

4. Processen med at få et gratis SSL/TLS-certifikat til Nginx udføres manuelt ved hjælp af Lad os kryptere det enkeltstående plugin.

Denne metode kræver, at port 80 skal være fri i den tid, Lad os kryptere klienten, validerer serverens identitet og genererer certifikater.

Så hvis Nginx allerede kører, skal du stoppe dæmonen med følgende kommando og køre ss -værktøjet for at bekræfte, at port 80 ikke længere er i brug i netværksstak.

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

5. Nu er det tid til at få et gratis SSL-certifikat fra Lad os kryptere. Gå til Lad os kryptere installationsmappen, hvis du ikke allerede er der, og kør kommandoen letsencrypt-auto med certonly - standalone og -d flag for hvert domæne eller underdomæne, du ønsker at generere et certifikat som foreslået i nedenstående eksempel.

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

6. Efter at en række pakker og afhængigheder er installeret på din maskine, beder Lad os kryptere dig om at indtaste din konto, som vil blive brugt til mistet nøglegendannelse eller presserende meddelelser.

7. Derefter skal du acceptere licensbetingelserne ved at trykke på Enter-tasten.

8. Endelig, hvis alt gik som det skulle, vises en lykønskningsinfomeddelelse på din bash-terminal. Meddelelsen vises også, når certifikatet udløber.

Trin 4: Installer Lad os kryptere SSL-certifikat i Nginx

9. Nu hvor du ejer et gratis SSL/TLS-certifikat, er det tid til at installere det i Nginx webserver, så dit domæne kan bruge det.

Alle nye SSL-certifikater placeres i /etc/letsencrypt/live/ under en mappe opkaldt efter dit domænenavn. Brug ls-kommandoen til at liste de certifikatfiler, der er udstedt til dit domæne, og identificere dem.

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

10. For at installere certifikatfilerne i Nginx og aktivere SSL skal du åbne filen /etc/nginx/nginx.conf til redigering og tilføje nedenstående udsagn efter den sidste lyttelinje fra serverblokken. Brug nedenstående illustration som vejledning.

# vi /etc/nginx/nginx.conf

Nginx SSL-blok uddrag:

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

Udskift domænenavnstrengen for SSL-certifikater, der matcher dit eget domæne.

11. Til sidst skal du genstarte Nginx-tjenesten og besøge dit domæne via HTTPS-protokol på https:/yourdomain . Siden skal indlæses glat uden nogen certifikatfejl.

# systemctl restart nginx
# service nginx restart

12. For at bekræfte SSL/TLS-certifikatet og dets rethed besøg følgende link:

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

13. Hvis du får en meddelelse om, at din server understøtter en svag DH-nøgleudveksling og en samlet vurdering af B-klasse, skal du oprette en ny Diffie-Hellman-chiffer i/etc/nginx/ssl/bibliotek for at beskytte din server mod Logjam-angreb fra kører følgende kommandoer.

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

I dette eksempel har vi brugt en 4096 bit-nøgle, som faktisk tager lang tid at generere og lægger en ekstra overhead på din server og på SSL-håndtryk.

Hvis der ikke er noget eksplicit behov for at bruge en nøgle så længe, og du ikke skal paranoide, skal du være sikker med en 2048 bit nøgle.

14. Når DH-nøgle er genereret, skal du åbne Nginx-konfigurationsfilen og tilføje nedenstående udsagn efter ssl_ciphers -linjen for at tilføje DH-nøglen og hæve dit domænes sikkerhedsniveau til en A + lønklasse.

# vi /etc/nginx/nginx.conf

Føj følgende blokuddrag til 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. Genstart Nginx-tjenesten for at anvende ændringer og gentest dit SSL-certifikat ved at rydde det tidligere resultatcache fra ovennævnte link.

# systemctl restart nginx
# service nginx restart

Trin 5: Forny automatisk Nginx Free Lader kryptere SSL-certifikater

16. Lad os kryptere CA frigiver gratis SSL/TLS-certifikater, der er gyldige i 90 dage. Certifikater kan manuelt fornyes og anvendes inden udløb ved hjælp af webroot-pluginet uden at stoppe din webserver ved at udstede nedenstående kommandoer:

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

Når du kører ovenstående kommando, skal du sørge for at udskifte webroot-path for at matche din webserver-dokumentrod, specificeret af Nginx root-sætning.

17. For at automatisk forny certifikatet, før det udløber, skal du oprette dette bash-script fra github erikaheidi i/usr/local/bin/directory og tilføje nedenstående indhold (scriptet er let modificeret for at afspejle Nginx-indstillingen).

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

Tilføj følgende linjer til filen 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. Udskift variablen $ webpath fra begyndelsen af scriptet for at matche din Nginx-dokumentrod. Sørg for, at scriptet er eksekverbart, og bc -beregner er installeret på dit system ved at udstede følgende kommandoer.

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

Du kan teste scriptet mod dit domæne ved at udstede følgende kommando:

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


19. For at køre certifikatfornyelsesprocessen automatisk skal du tilføje et nyt cron-job for at udføre scriptet hver uge for at opdatere certifikatet inden for 30 dage før udløbsdatoen.

# crontab -e

Tilføj følgende linje i bunden af filen.

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

Det er alt! Nu kan Nginx-serveren levere sikkert webindhold med et gratis SSL/TLS Lad os kryptere certifikat på dit websted.