HTTPS opsetzen mat Let's Encrypt SSL Certificate For Nginx op RHEL/CentOS 7/6
No der virdru Let's Encrypt Serie betreffend Apache oder Nginx Webserver mat SSL/TLS Modul, wäerte mir Iech guidéieren wéi Dir en SSL/TLS Zertifika generéiert an installéiere kënnt, deen gratis vun Let's Encrypt Certificate Authority kritt gëtt, déi mir benotzen fir Nginx Webserver HTTP Transaktiounen op CentOS/RHEL 7/6 a Fedora Verdeelung ze sécheren.
Wann Dir sicht Let's Encrypt fir Apache op RHEL/CentOS 7/6 a Fedora Verdeelungen z'installéieren, befollegt dëse Guide hei ënnen:
- En registréierten Domain Numm mat valabelen A DNS records fir zréck op de Server ëffentlech IP Adress ze weisen.
- Nginx Webserver installéiert mat SSL aktivéiert a virtuelle Hosten aktivéiert (nëmme fir Multiple Domains oder Subdomains Hosting).
Schrëtt 1: Installéieren Nginx Web Server
1. Am éischte Schrëtt, am Fall wou Dir den Nginx Daemon net schonn installéiert hutt, gitt déi folgend Kommandoen mat Root Privilegien fir den Nginx Webserver vun Epel Repositories z'installéieren:
# yum install epel-release # yum install nginx
Schrëtt 2: Luet oder Klon Gratis Loosst eis SSL Zertifikat verschlësselen
2. Déi schnellsten Method fir de Let's Encrypt Client op Linux Systemer z'installéieren andeems d'Packagen aus Github Repositories klonen.
Als éischt installéiere de Git Client um System mam Kommando ënnen:
# yum install git
3. Nodeems de Git Client installéiert ass, ännert de Verzeechnes op /opt
Wee an zitt Let's Encrypt Software andeems Dir déi folgend Kommandoen ausféiert:
# cd /opt # git clone https://github.com/letsencrypt/letsencrypt
Schrëtt 3: Generéiere e Gratis Let's Encrypt SSL Certificate fir Nginx
4. De Prozess fir e gratis SSL/TLS Zertifika fir Nginx ze kréien gëtt manuell gemaach andeems Dir Let's Encrypt Standalone Plugin benotzt.
Dës Method erfuerdert datt den Hafen 80 gratis muss sinn während der Zäit Let's Encrypt Client validéiert d'Identitéit vum Server a generéiert Certificaten.
Also, wann Nginx scho leeft, stoppen den Daemon mam folgendem Kommando a lafen ss
Utility fir ze bestätegen datt den Hafen 80 net méi am Netzstack benotzt gëtt.
# service nginx stop # systemctl stop nginx # ss -tln
5. Elo ass et Zäit fir e gratis SSL Zertifika vu Let's Encrypt ze kréien. Gitt op Let's Encrypt Installatiounsverzeichnis, wann Dir net schonn do sidd, a lafen de Kommando letsencrypt-auto
mat der certonly --standalone
Optioun an -d
Fändel fir all Domain oder Subdomain, deen Dir wëllt en Zertifika generéiere wéi am Beispill hei ënnen proposéiert.
# cd /opt # ./letsencrypt-auto certonly --standalone -d your_domain.tld -d www.yourdomain.tld
6. No enger Serie vu Packagen an Ofhängegkeeten déi op Ärer Maschinn installéiert sinn, Loosst eis verschlësselen Iech op Äre Kont aginn, deen fir verluerene Schlësselerhuelung oder dréngend Notifikatiounen benotzt gëtt.
7. Als nächst sollt Dir d'Lizenzbedéngungen averstanen andeems Dir op Enter Schlëssel dréckt.
8. Schlussendlech, wann alles wéi et sollt gaangen ass, gëtt e Gratulatiounsinformatiounsmessage op Ärem Bash-Terminal gewisen. De Message gëtt och ugewisen wann de Certificat oflafen.
Schrëtt 4: Installéiere Let's Encrypt SSL Certificate in Nginx
9. Elo datt Dir e gratis SSL/TLS Zertifika hutt, ass et Zäit et am Nginx Webserver z'installéieren fir datt Ären Domain et benotzt.
All nei SSL Certificaten ginn an /etc/letsencrypt/live/
ënner engem Verzeechnes no Ärem Domain Numm gesat. Benotzt ls Kommando fir d'Zertifikatdateien opzemaachen, déi fir Ären Domain erausginn sinn an se z'identifizéieren.
# sudo ls /etc/letsencrypt/live/ # sudo ls -al /etc/letsencrypt/live/your_domain.tld
10. Fir d'Zertifikatdateien an Nginx z'installéieren an SSL z'aktivéieren, öffnen d'/etc/nginx/nginx.conf
Datei fir z'änneren a fügen déi ënnen Aussoen no der leschter Lauschtertlinn vum Serverblock un. Benotzt d'Illustratioun hei ënnen als Guide.
# vi /etc/nginx/nginx.conf
Nginx SSL Block Extrait:
# 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';
Ersetzt den Domain Numm String fir SSL Certificaten fir Ären eegene Domain ze passen.
11. Endlech, restart den Nginx Service a besicht Är Domain iwwer HTTPS Protokoll op https://yourdomain
. D'Säit soll glat lueden, ouni Zertifikatfehler.
# systemctl restart nginx # service nginx restart
12. Fir den SSL/TLS Zertifika a seng Richtegkeet z'iwwerpréiwen, besicht de folgende Link:
https://www.ssllabs.com/ssltest/analyze.html
13. Am Fall wou Dir eng Notifikatioun kritt datt Äre Server e schwaache DH Schlësselaustausch an eng Gesamtbewäertung vu B Grad ënnerstëtzt, generéiert en neien Diffie-Hellman Chiffer am /etc/nginx/ssl/ Verzeichnis fir Äre Server géint de Logjam Attack ze schützen lafen déi folgend Kommandoen.
# mkdir /etc/nginx/ssl # cd /etc/nginx/ssl # openssl dhparam -out dhparams.pem 4096
An dësem Beispill hu mir e 4096 Bit Schlëssel benotzt, deen tatsächlech laang dauert fir ze generéieren an en extra Overhead op Ärem Server an op SSL Handshake ze setzen.
Am Fall wou et kee explizit Bedierfnes ass fir e Schlëssel sou laang ze benotzen an Dir sidd net paranoid, sollt Dir sécher sinn mat engem 2048 Bit Schlëssel.
14. Nodeems den DH Schlëssel generéiert gouf, öffnen d'Nginx Konfiguratiounsdatei a füügt déi ënnen Aussoen no der ssl_ciphers
Linn fir den DH Schlëssel ze addéieren an de Sécherheetsniveau vun Ärem Domain op en A+
eropzesetzen. Grad.
# vi /etc/nginx/nginx.conf
Füügt folgend Blockauszug op 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 Nginx Service fir Ännerungen z'applizéieren an Äert SSL Zertifika ze testen andeems Dir de fréiere Resultatcache vum Link hei uewen erwähnt.
# systemctl restart nginx # service nginx restart
Schrëtt 5: Auto Renew Nginx Free Lets Encrypt SSL Certificates
16. Let's Encrypt CA verëffentlecht fräi SSL/TLS Certificaten valabel fir 90 Deeg. Zertifikater kënnen manuell erneiert an applizéiert ginn virum Verfall mam Webroot Plugin, ouni Äre Webserver ze stoppen, andeems Dir déi folgend Kommandoen ausgëtt:
# ./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
Wann Dir de uewe genannte Kommando leeft, gitt sécher datt Dir den webroot-Path
ersetzt fir mat Ärem Webserverdokumentroot ze passen, spezifizéiert duerch Nginx Root Ausso.
17. Fir den Zertifikat automatesch ze erneieren ier et ofleeft, erstellt dëse Bash Skript vum github erikaheidi am /usr/local/bin/ Verzeechnes a füügt den Inhalt hei ënnen (de Skript ass liicht geännert fir den Nginx Astellung ze reflektéieren).
# vi /usr/local/bin/cert-renew
Füügt folgend Zeilen un cert-renew
Datei.
#!/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. Ersetzen $webpath
Variabel vum Ufank vum Skript fir mat Ärem Nginx Dokument root ze passen. Vergewëssert Iech datt de Skript ausführbar ass an de bc
Rechner op Ärem System installéiert ass andeems Dir déi folgend Kommandoen ausginn.
# chmod +x /usr/local/bin/cert-renew # yum install bc
Dir kënnt de Skript géint Är Domain testen andeems Dir de folgende Kommando ausgitt:
# /usr/local/bin/cert-renew yourdomain.tld
19. Schlussendlech, fir den Zertifikat Erneierungsprozess automatesch auszeféieren, füügt eng nei Cron-Job un fir de Skript all Woch auszeféieren fir den Zertifika bannent 30 Deeg virum Verfallsdatum ze aktualiséieren.
# crontab -e
Füügt déi folgend Zeil um Enn vun der Datei.
@weekly /usr/local/bin/cert-renew your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1
Dat ass alles! Elo kann den Nginx Server séchere Webinhalt mat engem gratis SSL/TLS Let's Encrypt Zertifikat op Ärer Websäit liwweren.