decembrie 9, 2021

cum se creează un certificat SSL auto-semnat pentru Apache în Ubuntu 16.04

Introducere

TLS sau transport Layer security și predecesorul său SSL, care înseamnă Secure sockets layer, sunt protocoale web utilizate pentru a înfășura traficul normal într-un înveliș protejat, criptat.

folosind această tehnologie, serverele pot trimite trafic în siguranță între server și clienți, fără posibilitatea ca mesajele să fie interceptate de părți externe. Sistemul de certificate ajută, de asemenea, utilizatorii să verifice identitatea site-urilor cu care se conectează.

în acest ghid, vă vom arăta cum să configurați un certificat SSL auto-semnat pentru utilizare cu un server web Apache pe un server Ubuntu 16.04.

notă: un certificat auto-semnat va cripta comunicarea între serverul dvs. și orice clienți. Cu toate acestea, deoarece nu este semnat de niciuna dintre autoritățile de certificare de încredere incluse în browserele web, utilizatorii nu pot utiliza certificatul pentru a valida automat identitatea serverului dvs.

un certificat auto-semnat poate fi adecvat dacă nu aveți un nume de domeniu asociat serverului dvs. și pentru cazurile în care interfața web criptată nu este orientată către utilizator. Dacă aveți un nume de domeniu, în multe cazuri este mai bine să utilizați un certificat semnat CA. Puteți afla cum să configurați un certificat de încredere gratuit cu proiectul Let ‘ s Encrypt aici.

cerințe preliminare

înainte de a începe, ar trebui să aveți un utilizator non-root configurat cu sudo privilegii. Puteți afla cum să configurați un astfel de cont de utilizator urmând configurarea inițială a serverului Pentru Ubuntu 16.04.

de asemenea, va trebui să aveți instalat serverul web Apache. Dacă doriți să instalați o întreagă stivă LAMP (Linux, Apache, MySQL, PHP) pe serverul dvs., puteți urma ghidul nostru despre configurarea LAMP pe Ubuntu 16.04. Dacă doriți doar serverul web Apache, săriți pașii referitori la PHP și MySQL din Ghid.

după ce ați finalizat cerințele preliminare, continuați mai jos.

Pasul 1: Creați certificatul SSL

TLS/SSL funcționează utilizând o combinație între un certificat public și o cheie privată. Cheia SSL este păstrată secretă pe server. Este folosit pentru a cripta conținutul trimis clienților. Certificatul SSL este partajat public cu oricine solicită conținutul. Poate fi folosit pentru a decripta conținutul semnat de cheia SSL asociată.

putem crea o pereche de chei și certificate auto-semnate cu OpenSSL într-o singură comandă:

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

vi se vor pune o serie de întrebări. Înainte de a trece peste asta, să aruncăm o privire la ceea ce se întâmplă în comanda pe care o emitem:

  • openssl: acesta este instrumentul de linie de comandă de bază pentru crearea și gestionarea certificatelor OpenSSL, chei și alte fișiere.
  • req: această Subcomandă specifică faptul că dorim să folosim gestionarea cererii de semnare a certificatului X. 509 (CSR). „X. 509” este un standard de infrastructură cu cheie publică la care SSL și TLS aderă pentru gestionarea cheilor și certificatelor. Vrem să creăm un nou X. 509 cert, așa că folosim această Subcomandă.
  • – x509: Acest lucru modifică în continuare subcomanda anterioară spunând utilitarului că dorim să facem un certificat auto-semnat în loc să generăm o cerere de semnare a certificatului, așa cum s-ar întâmpla în mod normal.
  • -noduri: aceasta îi spune OpenSSL să omită opțiunea de a asigura certificatul nostru cu o expresie de acces. Avem nevoie de Apache pentru a putea citi fișierul, fără intervenția utilizatorului, când serverul pornește. O frază de acces ar împiedica acest lucru, deoarece ar trebui să o introducem după fiecare repornire.
  • – zilele 365: Această opțiune stabilește durata de timp în care certificatul va fi considerat valabil. Am stabilit-o pentru un an aici.
  • – newkey rsa:2048: aceasta specifică faptul că dorim să generăm un nou certificat și o nouă cheie în același timp. Nu am creat cheia necesară pentru a semna certificatul într-un pas anterior, așa că trebuie să o creăm împreună cu certificatul. Porțiunea rsa:2048 îi spune să facă o cheie RSA care are o lungime de 2048 biți.
  • – keyout: această linie spune OpenSSL unde să plaseze fișierul cheie privată generat pe care îl creăm.
  • – afară: Acest lucru îi spune OpenSSL unde să plaseze certificatul pe care îl creăm.

după cum am menționat mai sus, aceste opțiuni vor crea atât un fișier cheie, cât și un certificat. Ni se vor pune câteva întrebări despre serverul nostru pentru a încorpora corect informațiile în certificat.

completați instrucțiunile în mod corespunzător. Cea mai importantă linie este cea care solicită Common Name (e.g. server FQDN or YOUR name). Trebuie să introduceți numele de domeniu asociat serverului dvs. sau, mai probabil, adresa IP publică a serverului dvs.

toate instrucțiunile vor arăta cam așa:

Output
Country Name (2 letter code) :USState or Province Name (full name) :New YorkLocality Name (eg, city) :New York CityOrganization Name (eg, company) :Bouncy Castles, Inc.Organizational Unit Name (eg, section) :Ministry of Water SlidesCommon Name (e.g. server FQDN or YOUR name) :server_IP_addressEmail Address :admin@your_domain.com

ambele fișiere pe care le-ați creat vor fi plasate în subdirectoarele corespunzătoare din Directorul /etc/ssl.

în timp ce folosim OpenSSL, ar trebui să creăm, de asemenea, un grup puternic Diffie-Hellman, care este utilizat în negocierea secretului perfect înainte cu clienții.

putem face acest lucru tastând:

  • sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

acest lucru poate dura câteva minute, dar când este gata, veți avea un grup DH puternic la /etc/ssl/certs/dhparam.pem pe care îl putem folosi în configurația noastră.

Pasul 2: Configurați Apache pentru a utiliza SSL

am creat fișierele noastre cheie și certificate în directorul /etc/ssl. Acum trebuie doar să ne modificăm configurația Apache pentru a profita de acestea.

vom face câteva ajustări la configurația noastră:

  1. vom crea un fragment de configurare pentru a specifica setările SSL implicite puternice.
  2. vom modifica fișierul gazdă virtuală SSL Apache inclus pentru a indica certificatele SSL generate.
  3. (recomandat) vom modifica fișierul gazdă virtuală necriptat pentru a redirecționa automat cererile către gazda virtuală criptată.

când am terminat, ar trebui să avem o configurație SSL sigură.

creați un fragment de configurare Apache cu setări puternice de criptare

în primul rând, vom crea un fragment de configurare Apache pentru a defini unele setări SSL. Acest lucru va configura Apache cu o suită puternică de cifrare SSL și va permite unele funcții avansate care vor ajuta la menținerea serverului nostru în siguranță. Parametrii pe care îi vom seta pot fi utilizați de orice gazde virtuale care permit SSL.

creați un fragment nou în directorul /etc/apache2/conf-available. Vom numi fișierul ssl-params.conf pentru a-i clarifica scopul:

  • sudo nano /etc/apache2/conf-available/ssl-params.conf

pentru a configura Apache SSL în siguranță, vom folosi recomandările Remy van Elst pe Cipherli.st site-ul. Acest site este conceput pentru a oferi setări de criptare ușor de consumat pentru software-ul popular. Puteți citi mai multe despre deciziile sale cu privire la alegerile Apache aici.

setările sugerate pe site-ul legat de mai sus oferă o securitate puternică. Uneori, acest lucru vine la costul de compatibilitate client mai mare. Dacă aveți nevoie pentru a sprijini clienții mai în vârstă, există o listă alternativă care poate fi accesată făcând clic pe link-ul de pe pagina etichetată „Da, dă-mi un ciphersuite care funcționează cu software-ul vechi / vechi.”Această listă poate fi înlocuită cu elementele copiate mai jos.

alegerea configurației pe care o utilizați va depinde în mare măsură de ceea ce trebuie să susțineți. Ambele vor oferi o mare securitate.

în scopurile noastre, putem copia setările furnizate în întregime. Vom face doar două mici modificări.

setați Directiva SSLOpenSSLConfCmd DHParameters pentru a indica fișierul Diffie-Hellman pe care l-am generat mai devreme. De asemenea, să ia un moment pentru a citi pe HTTP Strict Transport Security, sau HSTS, și în special despre funcționalitatea „preload”. Preîncărcarea HSTS oferă o securitate sporită, dar poate avea consecințe de anvergură dacă este activată accidental sau activată incorect. În acest ghid, nu vom preîncărca setările, dar puteți modifica acest lucru dacă sunteți sigur că înțelegeți implicațiile:

/etc/apache2/conf-available/ssl-params.conf
# from https://cipherli.st/# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.htmlSSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDHSSLProtocol All -SSLv2 -SSLv3SSLHonorCipherOrder On# Disable preloading HSTS for now. You can use the commented out header line that includes# the "preload" directive if you understand the implications.#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"Header always set X-Frame-Options DENYHeader always set X-Content-Type-Options nosniff# Requires Apache >= 2.4SSLCompression off SSLSessionTickets OffSSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)"SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Salvați și închideți fișierul când ați terminat.

modificați fișierul gazdă virtuală Apache SSL implicit

apoi, să modificăm /etc/apache2/sites-available/default-ssl.conf, fișierul gazdă virtuală Apache SSL implicit. Dacă utilizați un alt fișier bloc de server, înlocuiți numele acestuia în comenzile de mai jos.

înainte de a merge mai departe, să facem o copie de rezervă a fișierului gazdă virtual SSL original:

  • sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak

acum, deschideți fișierul gazdă virtuală SSL pentru a face ajustări:

  • sudo nano /etc/apache2/sites-available/default-ssl.conf

în interior, cu majoritatea comentariilor eliminate, fișierul gazdă virtuală ar trebui să arate așa în mod implicit:

/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # BrowserMatch "MSIE " \ # nokeepalive ssl-unclean-shutdown \ # downgrade-1.0 force-response-1.0 </VirtualHost></IfModule>

vom face unele ajustări minore la dosar. Vom seta lucrurile normale pe care am dori să le ajustăm într-un fișier gazdă virtuală (adresa de e-mail ServerAdmin, numele serverului etc.), ajustați directivele SSL pentru a indica certificatul și fișierele noastre cheie și decomentați o secțiune care oferă compatibilitate pentru browserele mai vechi.

după efectuarea acestor modificări, blocul dvs. de server ar trebui să arate similar cu acesta:

/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin [email protected] ServerName server_domain_or_IP DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE " \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost></IfModule>

Salvați și închideți fișierul când ați terminat.

(recomandat) modificați fișierul gazdă virtuală necriptat pentru a redirecționa către HTTPS

așa cum este acum, serverul va furniza atât HTTP necriptat, cât și trafic HTTPS criptat. Pentru o mai bună securitate, se recomandă în majoritatea cazurilor redirecționarea automată a HTTP către HTTPS. Dacă nu doriți sau nu aveți nevoie de această funcționalitate, puteți sări peste această secțiune în siguranță.

pentru a ajusta fișierul gazdă virtuală necriptat pentru a redirecționa tot traficul pentru a fi criptat SSL, putem deschide fișierul /etc/apache2/sites-available/000-default.conf :

  • sudo nano /etc/apache2/sites-available/000-default.conf

în interior, în cadrul blocurilor de configurare VirtualHost, trebuie doar să adăugăm o directivăRedirect, indicând tot traficul către versiunea SSL a site-ului:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> . . . Redirect "/" "https://your_domain_or_IP/" . . .</VirtualHost>

Salvați și închideți fișierul când ați terminat.

Pasul 3: Reglați Paravanul de protecție

dacă aveți paravanul de protecție ufw activat, conform recomandărilor ghidurilor preliminare, poate fi necesar să ajustați setările pentru a permite traficul SSL. Din fericire, Apache înregistrează câteva profiluri cu ufw la instalare.

putem vedea profilurile disponibile tastând:

  • sudo ufw app list

ar trebui să vedeți o listă ca aceasta:

Output
Available applications: Apache Apache Full Apache Secure OpenSSH

puteți vedea setarea curentă tastând:

  • sudo ufw status

dacă ați permis doar traficul HTTP obișnuit mai devreme, ieșirea dvs. ar putea arăta astfel:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereApache ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Apache (v6) ALLOW Anywhere (v6)

pentru a permite în plus traficul HTTPS, putem permite profilul „Apache Full” și apoi ștergeți alocația de profil redundantă ” Apache:

  • sudo ufw allow 'Apache Full'
  • sudo ufw delete allow 'Apache'

starea dvs. ar trebui să arate așa acum:

  • sudo ufw status
Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereApache Full ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Apache Full (v6) ALLOW Anywhere (v6)

Pasul 4: Activați modificările în Apache

acum că am făcut modificările și ne-am ajustat firewall-ul, putem activa modulele SSL și anteturile din Apache, putem activa gazda noastră virtuală pregătită pentru SSL și reporni Apache.

putem activa mod_ssl, modulul SSL Apache și mod_headers, necesare de unele dintre setările din fragmentul nostru SSL, cu comanda a2enmod :

  • sudo a2enmod ssl
  • sudo a2enmod headers

apoi, putem activa gazda noastră virtuală SSL cu comanda a2ensite :

  • sudo a2ensite default-ssl

de asemenea, va trebui să activăm fișierul nostru ssl-params.conf, pentru a citi în valorile pe care le setăm:

  • sudo a2enconf ssl-params

în acest moment, site-ul nostru și modulele necesare sunt activate. Ar trebui să verificăm pentru a ne asigura că nu există erori de sintaxă în fișierele noastre. Putem face acest lucru tastând:

  • sudo apache2ctl configtest

dacă totul are succes, veți obține un rezultat care arată astfel:

Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this messageSyntax OK

prima linie este doar un mesaj care vă spune că directiva ServerName nu este stabilită la nivel global. Dacă doriți să scăpați de acel mesaj, puteți seta ServerName la numele de domeniu sau adresa IP a serverului dvs. în /etc/apache2/apache2.conf. Acest lucru este opțional, deoarece mesajul nu va face rău.

dacă ieșirea dvs. are Syntax OK în ea, fișierul dvs. de configurare nu are erori de sintaxă. Putem reporni în siguranță Apache pentru a implementa modificările noastre:

  • sudo systemctl restart apache2

Pasul 5: testați criptarea

acum, suntem gata să testăm serverul nostru SSL.

deschideți browserul web și tastați https:// urmat de numele de domeniu sau IP-ul serverului dvs. în bara de adrese:

https://server_domain_or_IP

deoarece certificatul pe care l-am creat nu este semnat de una dintre autoritățile de certificare de încredere ale browserului dvs., veți vedea probabil un avertisment înfricoșător, precum cel de mai jos:

Apache auto-semnat cert avertisment

acest lucru este de așteptat și normal. Suntem interesați doar de aspectul de criptare al certificatului nostru, nu de validarea terță parte a autenticității gazdei noastre. Faceți clic pe” Avansat ” și apoi link-ul furnizat pentru a trece la gazdă oricum:

Apache auto-semnat suprascrie

ar trebui să fie luate la site-ul dvs. Dacă vă uitați în bara de adrese a browserului, veți vedea o blocare cu un „x” peste ea. În acest caz, aceasta înseamnă doar că certificatul nu poate fi validat. Încă criptează conexiunea.

dacă ați configurat Apache pentru a redirecționa HTTP la HTTPS, puteți verifica, de asemenea, dacă redirecționarea funcționează corect:

http://server_domain_or_IP

dacă rezultă aceeași pictogramă, aceasta înseamnă că redirecționarea dvs. a funcționat corect.

Pasul 6: treceți la o redirecționare permanentă

dacă redirecționarea dvs. a funcționat corect și sunteți sigur că doriți să permiteți doar trafic criptat, ar trebui să modificați din nou gazda virtuală Apache necriptată pentru a face redirecționarea permanentă.

deschideți din nou fișierul de configurare a blocului de server:

  • sudo nano /etc/apache2/sites-available/000-default.conf

găsiți linia Redirect pe care am adăugat-o mai devreme. Adăugați permanent la acea linie, care schimbă redirecționarea de la o redirecționare temporară 302 la o redirecționare permanentă 301:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> . . . Redirect permanent "/" "https://your_domain_or_IP/" . . .</VirtualHost>

Salvați și închideți fișierul.

verificați configurația pentru erori de sintaxă:

  • sudo apache2ctl configtest

când sunteți gata, reporniți Apache pentru a face redirecționarea permanentă:

  • sudo systemctl restart apache2

concluzie

ați configurat serverul Apache pentru a utiliza criptare puternică pentru conexiunile client. Acest lucru vă va permite să serviți cererile în siguranță și va împiedica părțile externe să vă citească traficul.

Lasă un răspuns

Adresa ta de email nu va fi publicată.