december 9, 2021

Hogyan hozzunk létre saját aláírású SSL tanúsítványt az Apache számára az Ubuntu 16.04-ben

Bevezetés

a TLS vagy a transport Layer security, valamint elődje, az SSL, amely a secure sockets layer rövidítést jelenti, olyan webes protokollok, amelyeket a normál forgalom védett, titkosított burkolatba történő becsomagolására használnak.

ezzel a technológiával a szerverek biztonságosan tudnak forgalmat küldeni a szerver és az ügyfelek között anélkül, hogy az üzeneteket külső felek elfognák. A tanúsítványrendszer segíti a felhasználókat azon webhelyek személyazonosságának ellenőrzésében is, amelyekhez kapcsolódnak.

ebben az útmutatóban megmutatjuk, hogyan állíthat be egy önaláírt SSL tanúsítványt az Apache webszerverrel való használatra egy Ubuntu 16.04 szerveren.

megjegyzés: az önaláírt tanúsítvány titkosítja a szerver és az ügyfelek közötti kommunikációt. Mivel azonban a webböngészőkben található megbízható tanúsító hatóságok egyike sem írta alá, a felhasználók nem használhatják a tanúsítványt a kiszolgáló identitásának automatikus ellenőrzésére.

az önaláírt tanúsítvány megfelelő lehet, ha nem rendelkezik a kiszolgálóhoz társított tartománynévvel, valamint olyan esetekben, amikor a titkosított webes felület nem a felhasználó felé néz. Ha van domain neve, sok esetben jobb, ha CA-aláírással ellátott tanúsítványt használ. Itt megtudhatja, hogyan állíthat be egy ingyenes megbízható tanúsítványt a Let ‘ s Encrypt projekttel.

előfeltételek

Mielőtt elkezdené, rendelkeznie kell egy nem root felhasználóval, amely sudo jogosultságokkal rendelkezik. Megtudhatja, hogyan állíthat be ilyen felhasználói fiókot az Ubuntu 16.04 kezdeti szerverbeállításának követésével.

telepítenie kell az Apache webszervert is. Ha egy teljes LAMP (Linux, Apache, MySQL, PHP) veremet szeretne telepíteni a szerverére, kövesse a LAMP Ubuntu 16.04-es beállítására vonatkozó útmutatónkat. Ha csak az Apache webszervert szeretné, hagyja ki a PHP és a MySQL lépéseit az útmutatóban.

miután elvégezte az előfeltételeket, folytassa az alábbiakban.

1. lépés: SSL tanúsítvány létrehozása

a TLS / SSL egy nyilvános tanúsítvány és egy privát kulcs kombinációjával működik. Az SSL kulcs titokban marad a szerveren. Az ügyfeleknek küldött tartalom titkosítására szolgál. Az SSL tanúsítványt nyilvánosan megosztják bárkivel, aki a tartalmat kéri. Használható a társított SSL kulcs által aláírt tartalom visszafejtésére.

létrehozhatunk egy önaláírt kulcs – és tanúsítványpárt az OpenSSL-lel egyetlen parancsban:

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

egy sor kérdést fognak feltenni Önnek. Mielőtt átmennénk ezen, vessünk egy pillantást arra, hogy mi történik az általunk kiadott parancsban:

  • openssl: ez az alapvető parancssori eszköz az OpenSSL tanúsítványok, kulcsok és egyéb fájlok létrehozásához és kezeléséhez.
  • req: ez az alparancs meghatározza, hogy az X. 509 tanúsítvány-aláírási kérelem (CSR) kezelését akarjuk használni. Az “X. 509” egy nyilvános kulcsú infrastruktúra-szabvány, amelyet az SSL és a TLS a kulcs-és tanúsítványkezelés során betart. Új X. 509 cert-et akarunk létrehozni, ezért ezt az alparancsot használjuk.
  • – x509: Ez tovább módosítja az előző alparancsot azzal, hogy elmondja a segédprogramnak, hogy a tanúsítvány-aláírási kérelem generálása helyett önaláírt tanúsítványt akarunk készíteni, mint általában.
  • – csomópontok: ez azt mondja Az OpenSSL-nek, hogy hagyja ki azt a lehetőséget, hogy tanúsítványunkat jelszóval biztosítsa. Szükségünk van az Apache-ra, hogy képes legyen olvasni a fájlt, felhasználói beavatkozás nélkül, amikor a szerver elindul. A jelszó megakadályozná ezt, mert minden újraindítás után meg kell adnunk.
  • – 365. nap: Ez az opció beállítja azt az időtartamot, ameddig a tanúsítvány érvényesnek tekintendő. Itt egy évre állítottuk be.
  • – newkey rsa:2048: ez azt jelenti, hogy egyszerre akarunk új tanúsítványt és új kulcsot létrehozni. Az előző lépésben nem hoztuk létre a tanúsítvány aláírásához szükséges kulcsot, ezért a tanúsítvánnyal együtt létre kell hoznunk. A rsa:2048 rész azt mondja, hogy készítsen egy 2048 bit hosszú RSA kulcsot.
  • – keyout: ez a sor megmondja az OpenSSL-nek, hogy hol helyezze el a létrehozott privát kulcsfájlt.
  • – ki: Ez megmondja az OpenSSL-nek, hogy hol helyezze el az általunk létrehozott tanúsítványt.

mint fentebb említettük, ezek az opciók mind kulcsfájlt, mind tanúsítványt hoznak létre. Néhány kérdést fogunk feltenni a szerverünkkel kapcsolatban annak érdekében, hogy az információkat helyesen ágyazzuk be a tanúsítványba.

töltse ki megfelelően az utasításokat. A legfontosabb sor az, amely a Common Name (e.g. server FQDN or YOUR name) – t kéri. Meg kell adnia a kiszolgálóhoz társított domain nevet, vagy valószínűbb, hogy a szerver nyilvános IP-címét.

az összes felszólítás valahogy így fog kinézni:

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

mindkét létrehozott fájl a /etc/ssl könyvtár megfelelő alkönyvtárába kerül.

az OpenSSL használata közben létre kell hoznunk egy erős Diffie-Hellman csoportot is, amelyet az ügyfelekkel való tökéletes előre titoktartás tárgyalására használnak.

ezt gépeléssel tehetjük meg:

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

ez eltarthat néhány percig, de ha ez megtörtént, akkor lesz egy erős DH csoport /etc/ssl/certs/dhparam.pem, hogy tudjuk használni a konfiguráció.

2.lépés: az Apache konfigurálása SSL használatára

a kulcs-és tanúsítványfájlokat a /etc/ssl könyvtárban hoztuk létre. Most már csak módosítanunk kell az Apache konfigurációnkat, hogy kihasználhassuk ezeket.

néhány módosítást végzünk a konfigurációnkon:

  1. létrehozunk egy konfigurációs részletet az erős alapértelmezett SSL-beállítások megadásához.
  2. módosítjuk a mellékelt SSL Apache Virtual Host fájlt, hogy a generált SSL tanúsítványokra mutasson.
  3. (ajánlott) módosítjuk a titkosítatlan virtuális gazdagép fájlt, hogy automatikusan átirányítsuk a kéréseket a titkosított virtuális gazdagépre.

amikor befejeztük, biztonságos SSL konfigurációval kell rendelkeznünk.

hozzon létre egy Apache konfigurációs részletet erős titkosítási beállításokkal

először létrehozunk egy Apache konfigurációs részletet néhány SSL beállítás meghatározásához. Ez az Apache-t egy erős SSL titkosító csomaggal állítja be, és lehetővé tesz néhány fejlett funkciót, amelyek segítenek a szerver biztonságának megőrzésében. Az általunk beállított paramétereket bármely virtuális gazdagép használhatja, amely engedélyezi az SSL-t.

hozzon létre egy új részletet a /etc/apache2/conf-available könyvtárban. Megnevezzük a fájlt ssl-params.conf hogy világossá tegyük a célját:

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

az Apache SSL biztonságos beállításához Remy van Elst ajánlásait fogjuk használni a Cipherli.st oldal. Ezt a webhelyet úgy tervezték, hogy könnyen fogyasztható titkosítási beállításokat biztosítson a népszerű szoftverek számára. Az Apache választásokkal kapcsolatos döntéseiről itt olvashat bővebben.

a fent hivatkozott webhelyen javasolt beállítások erős biztonságot nyújtanak. Néha, ez a nagyobb kliens kompatibilitás árán jár. Ha régebbi ügyfeleket kell támogatnia, van egy alternatív lista, amelyhez az “igen, adj nekem egy titkosítást, amely régi / régi szoftverekkel működik.”Ez a lista helyettesíthető az alább másolt elemekkel.

az Ön által használt konfiguráció kiválasztása nagyban függ attól, hogy mit kell támogatnia. Mindkettő nagy biztonságot nyújt.

céljainkra a megadott beállításokat teljes egészében lemásolhatjuk. Csak két apró változtatást hajtunk végre.

állítsa be a SSLOpenSSLConfCmd DHParameters irányelvet úgy, hogy a korábban létrehozott Diffie-Hellman fájlra mutasson. Ezenkívül szánjon egy percet a HTTP Strict Transport Security vagy a HSTS olvasására, különös tekintettel az “előterhelés” funkcióra. A HSTS előtöltése fokozott biztonságot nyújt, de messzemenő következményekkel járhat, ha véletlenül engedélyezik vagy helytelenül engedélyezik. Ebben az útmutatóban nem fogjuk előre betölteni a beállításokat, de módosíthatja, ha biztos benne, hogy megérti a következményeket:

/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"

mentse el és zárja be a fájlt, ha végzett.

módosítsa az alapértelmezett Apache SSL virtuális gazdagép fájlt

ezután módosítsuk /etc/apache2/sites-available/default-ssl.conf, az alapértelmezett Apache SSL virtuális gazdagép fájlt. Ha másik kiszolgálóblokk-fájlt használ, cserélje ki a nevét az alábbi parancsokban.

mielőtt tovább mennénk, Készítsünk biztonsági másolatot az eredeti SSL virtuális gazdagép fájlról:

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

most nyissa meg az SSL virtuális gazdagép fájlt a beállítások elvégzéséhez:

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

belül, a legtöbb megjegyzés eltávolításával, a virtuális gazdagép fájlnak alapértelmezés szerint így kell kinéznie:

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

néhány kisebb módosítást fogunk végezni a fájlban. Beállítjuk azokat a normál dolgokat, amelyeket egy virtuális Gazdagépfájlban szeretnénk beállítani (ServerAdmin e-mail cím, kiszolgálónév stb.), állítsa be az SSL irányelveket, hogy mutasson a tanúsítványunkra és a kulcsfájljainkra, és szüntesse meg az egyik szakaszt, amely kompatibilitást biztosít a régebbi böngészők számára.

a módosítások elvégzése után a kiszolgáló blokkjának ehhez hasonlónak kell lennie:

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

mentse el és zárja be a fájlt, ha végzett.

(ajánlott) módosítsa a titkosítatlan virtuális gazdagép fájlt úgy, hogy átirányítsa a HTTPS

a jelenlegi állapot szerint a szerver mind titkosítatlan HTTP, mind titkosított HTTPS forgalmat biztosít. A jobb biztonság érdekében a legtöbb esetben ajánlott a HTTP átirányítása a HTTPS-re automatikusan. Ha nem akarja vagy szüksége van erre a funkcióra, biztonságosan kihagyhatja ezt a részt.

a titkosítatlan virtuális Gazdagépfájl beállításához az összes forgalom SSL titkosításra történő átirányításához megnyithatjuk a /etc/apache2/sites-available/000-default.conf fájlt:

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

belül, a VirtualHost konfigurációs blokkokon belül csak hozzá kell adnunk egy Redirect irányelvet, amely az összes forgalmat a webhely SSL verziójára irányítja:

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

mentse el és zárja be a fájlt, ha végzett.

3.lépés: Állítsa be a tűzfalat

ha a ufw tűzfal engedélyezve van, az előfeltétel útmutatók ajánlása szerint, szükség lehet A beállítások módosítására az SSL-forgalom engedélyezéséhez. Szerencsére az Apache regisztrál néhány profilt ufw – val a telepítéskor.

a rendelkezésre álló profilokat gépeléssel láthatjuk:

  • sudo ufw app list

látnia kell egy ilyen listát:

Output
Available applications: Apache Apache Full Apache Secure OpenSSH

az aktuális beállítást gépeléssel láthatja:

  • sudo ufw status

ha korábban csak a szokásos HTTP-forgalmat engedélyezte, a kimenet így nézhet ki:

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

a HTTPS forgalom további engedélyezéséhez engedélyezhetjük az “Apache Full” profilt, majd törölhetjük a redundáns “Apache” profilengedélyt:

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

az állapotod most így néz ki:

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

4. lépés: Engedélyezze a változtatásokat az Apache

alkalmazásban most, hogy elvégeztük a változtatásokat és módosítottuk a tűzfalat, engedélyezhetjük az SSL és a fejléc modulokat az Apache – ban, engedélyezhetjük az SSL-kész virtuális gazdagépet, és újraindíthatjuk az Apache-t.

engedélyezhetjük a mod_ssl – t, az Apache SSL modult és a mod_headers – ot, amelyekre az SSL kódrészletünk néhány beállításának szüksége van, a a2enmod paranccsal:

  • sudo a2enmod ssl
  • sudo a2enmod headers

ezután engedélyezhetjük SSL virtuális Gazdagépünket a a2ensite paranccsal:

  • sudo a2ensite default-ssl

engedélyeznünk kell a ssl-params.conf fájlt is, hogy elolvassuk az általunk beállított értékeket:

  • sudo a2enconf ssl-params

ezen a ponton a Webhelyünk és a szükséges modulok engedélyezve vannak. Ellenőriznünk kell, hogy nincsenek-e szintaktikai hibák a fájljainkban. Ezt úgy tehetjük meg, hogy beírjuk:

  • sudo apache2ctl configtest

ha minden sikeres, akkor olyan eredményt kap, amely így néz ki:

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

az első sor csak egy üzenet, amely azt mondja, hogy a ServerName irányelv nincs globálisan beállítva. Ha meg akar szabadulni ettől az üzenettől, beállíthatja a ServerName értéket a kiszolgáló tartománynevére vagy IP-címére a /etc/apache2/apache2.confmezőben. Ez nem kötelező, mivel az üzenet nem fog ártani.

ha a kimeneten Syntax OK van, a konfigurációs fájlban nincsenek szintaktikai hibák. Biztonságosan újraindíthatjuk az Apache-t a változások végrehajtásához:

  • sudo systemctl restart apache2

5. lépés: tesztelje a titkosítást

most készen állunk az SSL szerver tesztelésére.

nyissa meg a webböngészőt, írja be a https:// parancsot, majd a szerver domain nevét vagy IP-címét a címsorba:

https://server_domain_or_IP

mivel az általunk létrehozott tanúsítványt nem írta alá a böngésző egyik megbízható tanúsító hatósága, valószínűleg az alábbihoz hasonló ijesztő megjelenésű figyelmeztetést fog látni:

Apache saját aláírású cert figyelmeztetés

ez várható és normális. Minket csak a tanúsítványunk titkosítási aspektusa érdekel, nem pedig a gazdagép hitelességének harmadik fél általi érvényesítése. Kattintson a “Speciális” gombra, majd a megadott linkre, hogy mindenképpen eljusson a gazdagéphez:

Apache önaláírt felülbírálása

meg kell tenni, hogy a helyszínen. Ha megnézi a böngésző címsorát, látni fog egy zárat, rajta egy “x” betűvel. Ebben az esetben ez csak azt jelenti, hogy a tanúsítványt nem lehet érvényesíteni. Még mindig titkosítja a kapcsolatot.

ha az Apache-t úgy konfigurálta, hogy átirányítsa a HTTP-t HTTPS-re, akkor azt is ellenőrizheti, hogy az átirányítás megfelelően működik-e:

http://server_domain_or_IP

ha ez ugyanazt az ikont eredményezi, ez azt jelenti, hogy az átirányítás megfelelően működött.

6.lépés: Váltson állandó átirányításra

ha az átirányítás megfelelően működött, és biztos benne, hogy csak titkosított forgalmat szeretne engedélyezni, akkor újra módosítania kell a titkosítatlan Apache virtuális gazdagépet, hogy az átirányítás állandó legyen.

nyissa meg újra a szerverblokk konfigurációs fájlját:

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

keresse meg a korábban hozzáadott Redirect Sort. Adja hozzá a permanent sort, amely megváltoztatja az átirányítást 302 ideiglenes átirányításról 301 állandó átirányításra:

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

mentse és zárja be a fájlt.

ellenőrizze a konfigurációt szintaktikai hibák esetén:

  • sudo apache2ctl configtest

ha készen áll, indítsa újra az Apache-t, hogy az átirányítás állandó legyen:

  • sudo systemctl restart apache2

következtetés

az Apache szervert úgy konfigurálta, hogy erős titkosítást használjon az ügyfélkapcsolatokhoz. Ez lehetővé teszi a kérések biztonságos kiszolgálását, és megakadályozza, hogy a külső felek olvassák a forgalmat.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.