...
tvalfat3

Självsignerat SSL-certifikat för Apache

av | 12 januari 2023 | Linux Ubuntu Server | 0 Kommentarer

Hur man skapar ett självsignerat SSL-certifikat för Apache i Ubuntu 22.04

Introduktion

TLS , eller ”transport layer security” – och dess föregångare SSL – är protokoll som används för att linda in normal trafik i ett skyddat, krypterat omslag. Med denna teknik kan servrar säkert skicka information till sina klienter utan att deras meddelanden fångas upp eller läsas av en extern part.

I den här guiden kommer du att skapa och använda ett självsignerat TLS-certifikat med Apache-webbservern på Ubuntu 22.04. Du använder openssl kommandoradsverktyget för att skapa certifikatet och sedan konfigurerar du Apache för att använda det.

Förutsättningar

Innan du startar den här handledningen behöver du följande:

  • Tillgång till en Ubuntu 22.04-server med en icke – root , sudo-aktiverad användare.
  • Du måste också ha Apache installerat. Du kan installera Apache med apt. Uppdatera först det lokala paketindexet för att återspegla de senaste uppströmsändringarna:
sudo apt update

Steg 1 — Aktivering mod_ssl

Innan du kan använda några TLS-certifikat måste du först aktivera mod_ssl, en Apache-modul som ger stöd för SSL-kryptering.

Aktivera mod_ssl med a2enmod kommandot:

sudo a2enmod ssl

Starta om Apache för att aktivera modulen:

 

sudo systemctl restart apache2

Modulen mod_ssl är nu aktiverad och redo att användas.

 

Steg 2 – Skapa TLS-certifikatet

Nu när Apache är redo att använda kryptering kan vi gå vidare till att generera ett nytt TLS-certifikat. Certifikatet kommer att lagra en del grundläggande information om din webbplats och kommer att åtföljas av en nyckelfil som gör det möjligt för servern att säkert hantera krypterad data.

Vi kan skapa TLS-nyckeln och certifikatfiler med openssl kommandot:

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

När du har skrivit in kommandot kommer du att tas till en prompt där du kan ange information om din webbplats. Innan vi går igenom det, låt oss ta en titt på vad som händer i kommandot vi utfärdar:

  • openssl: Detta är kommandoradsverktyget för att skapa och hantera OpenSSL-certifikat, nycklar och andra filer.
  • req -x509: Detta anger att vi vill använda X.509 CSR-hantering (Certificate Signing request). X.509 är en infrastrukturstandard för offentlig nyckel som TLS följer för nyckel- och certifikathantering.
  • -nodes: Detta säger åt OpenSSL att hoppa över alternativet att säkra vårt certifikat med en lösenfras. Vi behöver Apache för att kunna läsa filen, utan användarinblandning, när servern startar. En lösenfras skulle förhindra detta från att hända, eftersom vi skulle behöva ange den efter varje omstart.
  • -days 365: Det här alternativet anger hur lång tid certifikatet ska anses giltigt. Vi sätter det för ett år här. Många moderna webbläsare kommer att avvisa alla certifikat som är giltiga längre än ett år.
  • -newkey rsa:2048: Detta anger att vi vill generera ett nytt certifikat och en ny nyckel samtidigt. Vi skapade inte nyckeln som krävs för att signera certifikatet i ett tidigare steg, så vi måste skapa det tillsammans med certifikatet. Delen rsa:2048 säger åt den att göra en RSA-nyckel som är 2048 bitar lång.
  • -keyout: Den här raden talar om för OpenSSL var den genererade privata nyckelfilen som vi skapar ska placeras.
  • -out: Detta talar om för OpenSSL var certifikatet som vi skapar ska placeras.

Fyll i anvisningarna på lämpligt sätt. Den viktigaste raden är den som begär Common Name. Du måste ange antingen värdnamnet du ska använda för att komma åt servern med, eller serverns offentliga IP. Det är viktigt att det här fältet matchar vad du än lägger i webbläsarens adressfält för att komma åt webbplatsen, eftersom en felaktig matchning kommer att orsaka fler säkerhetsfel.

Den fullständiga listan med uppmaningar kommer att se ut ungefär så här:

Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Exempel
Locality Name (eg, city) [Default City]:Exempel
Organization Name (eg, company) [Default Company Ltd]:Exempel Företag
Organizational Unit Name (eg, section) []:Exempel Avd
Common Name (eg, your name or your server’s hostname) []:din_domän_eller_ip
Email Address []:[email protected]

Båda filerna du skapade kommer att placeras i lämpliga underkataloger under /etc/ssl.

Därefter kommer vi att uppdatera vår Apache-konfiguration för att använda det nya certifikatet och nyckeln.

Steg 3 – Konfigurera Apache för att använda TLS

Nu när vi har vårt självsignerade certifikat och nyckel tillgänglig måste vi uppdatera vår Apache-konfiguration för att kunna använda dem. På Ubuntu kan du placera nya Apache-konfigurationsfiler (de måste sluta på .conf) i /etc/apache2/sites-available/ och de kommer att laddas nästa gång Apache-processen laddas om eller startas om.

För den här handledningen kommer vi att skapa en ny minimal konfigurationsfil. (Om du redan har en Apache <Virtualhost>-inställning och bara behöver lägga till TLS till den, kommer du troligen behöva kopiera över konfigurationsraderna som börjar med SSL, och byta VirtualHost porten från 80 till 443. Vi tar hand om porten 80 i nästa steg. )

Öppna en ny fil i katalogen /etc/apache2/sites-available:

sudo nano /etc/apache2/sites-available/din_domän_eller_ip.conf

Klistra in följande minimala VirtualHost-konfiguration:

/etc/apache2/sites-available/din_domän_eller_ip.conf

<VirtualHost *:443>
      ServerName din_domän_eller_ip
      DocumentRoot /var/www/din_domän_eller_ip

      SSLEngine on
      SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
      SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

Var noga med att uppdatera ServerName raden till hur du tänker adressera din server. Detta kan vara ett värdnamn, fullständigt domännamn eller en IP-adress. Se till att det du väljer matchar det Common Name du valde när du gjorde certifikatet.

De återstående raderna anger en DocumentRoot katalog att servera filer från, och de TLS-alternativ som behövs för att peka Apache till vårt nyskapade certifikat och nyckel.

Låt oss nu skapa vår DocumentRoot och lägga in en HTML-fil i den bara för testsyften:

sudo mkdir /var/www/din_domän_eller_ip

Öppna en ny index.html fil med din textredigerare:

sudo nano /var/www/din_domän_eller_ip/index.html

Klistra in följande i den tomma filen:

/var/www/din_domän_eller_ip/index.html

<h1>it worked!</h1>

Detta är naturligtvis inte en fullständig HTML-fil, men webbläsare är överseende och det kommer att räcka för att verifiera vår konfiguration.

Spara och stäng filen. Därefter måste vi aktivera konfigurationsfilen med a2ensite verktyget:

sudo a2ensite din_domän_eller_ip.conf

Låt oss sedan testa för konfigurationsfel:

sudo apache2ctl configtest

Om allt lyckas får du ett resultat som ser ut så här:

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 message
Syntax OK

Den första raden är ett meddelande som talar om att ServerName direktivet inte är globalt. Du kan lösa detta genom att öppna /etc/apache2/apache2.conf och lägga till raden “ServerName din servers namn“.  Detta är valfritt eftersom meddelandet inte skadar.

Om din utdata har Syntax OK i den, har din konfigurationsfil inga syntaxfel. Vi kan säkert ladda om Apache för att implementera våra ändringar:

sudo systemctl reload apache2

Ladda nu din webbplats i en webbläsare, var noga med att använda https:// i början.

Du bör se ett fel. Detta är normalt för ett självsignerat certifikat! Webbläsaren varnar dig för att den inte kan verifiera serverns identitet, eftersom vårt certifikat inte är signerat av någon av dess kända certifikatmyndigheter. För teständamål och personligt bruk kan detta vara bra. Du bör kunna klicka dig vidare till avancerad eller mer information och välja att fortsätta.

När du har gjort det kommer din webbläsare att ladda it worked! meddelandet.

Obs: om din webbläsare inte alls ansluter till servern, se till att din anslutning inte blockeras av en brandvägg. Om du använder ufw kommer följande kommandon att öppna portar 80och 443:

sudo ufw allow "Apache Full"

Därefter kommer vi att lägga till ytterligare ett VirtualHost avsnitt till vår konfiguration för att servera vanliga HTTP-förfrågningar och omdirigera dem till HTTPS.

Steg 4 — Omdirigera HTTP till HTTPS

För närvarande kommer vår konfiguration endast att svara på HTTPS-förfrågningar på port 443. Det är god praxis att även svara på port 80, även om du vill tvinga all trafik att krypteras. Låt oss ställa in en VirtualHost för att svara på dessa okrypterade förfrågningar och omdirigera dem till HTTPS.

Öppna samma Apache-konfigurationsfil som vi startade i tidigare steg:

sudo nano /etc/apache2/sites-available/din_domän_eller_ip.conf

Längst ned skapar du ett annat VirtualHostblock för att matcha förfrågningar på port 80. Använd ServerName direktivet för att återigen matcha ditt domännamn eller IP-adress. Använd sedan Redirect för att matcha eventuella förfrågningar och skicka dem till TLS VirtualHost. Se till att inkludera det avslutande snedstrecket:

/etc/apache2/sites-available/din_domän_eller_ip.conf

<VirtualHost *:80>
               ServerName din_domän_eller_ip
               Redirect / https://din_domän_eller_ip/
</VirtualHost>

Spara och stäng den här filen när du är klar, testa sedan din konfigurationssyntax igen och ladda om Apache:

sudo apachectl configtest
sudo systemctl reload apache2

Du kan testa den nya omdirigeringsfunktionen genom att besöka din webbplats med vanligt http://framför adressen. Du bör omdirigeras till https:// automatiskt.

 

Det var allt, lycka till!

0 kommentarer

Skicka en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.