Niet getest voor nieuwste versie: Dit artikel is niet getest voor de nieuwste versie. |
Webserver met https
Apache2 webserver
Een Apache2 webserver kan in Ubuntu worden geïnstalleerd met tasksel:
sudo tasksel
Deze webserver wordt voor "normaal" (http, poort 80) gebruik geconfigureerd. Maar de webserver kan ook gebruikt worden voor een beveiligde (https, poort 443) verbinding. Dit artikel gaat hier op in.
certificaten
Een tegenwoordig veel gebruikte vorm van versleuteling is door middel van een publieke sleutel. Deze techniek gebruikt een publieke sleutel (public key) in combinatie met een geheime sleutel (private key). De Apache webserver maakt gebruik van publieke sleutels voor een versleutelde verbinding via https (http over ssl).
Een certificaat wordt gebruikt voor de verspreiding van de publieke sleutel en om informatie uit te wisselen over de organisatie achter de webserver. Een certificaat kan digitaal worden ondertekend door een betrouwbare derde partij (een Certificate Authority ofwel CA). Deze derde partij kan bevestigen dat het certificaat correct is.
Getekende certificaten
Om een beveiligde webserver op te zetten met behulp van een publieke sleutel moet normaal gesproken een certificaat worden aangevraagd bij een Certificate Authority (CA). Met dit verzoek moet de publieke sleutel en een betalingsbewijs worden meegestuurd.
Het alternatief is om zelf het certificaat te ondertekenen.
Een zelf-ondertekend certificaat moet niet gebruikt worden in een productie omgeving.
Een zelf-ondertekend certificaat heeft twee belangrijke nadelen:
- Het certificaat kan niet automatisch worden gebruikt. De gebruiker moet het certificaat (in de meeste toepassingen) zelf accepteren.
- Er is geen garantie over de organisatie achter de webserver.
Een certificaat aanvragen
Of er gebruik wordt gemaakt van een CA of een zelf-ondertekend certificaat, in alle gevallen moet een publieke sleutel worden gemaakt.
Als het certificaat gebruikt gaat worden voor een server is het gebruikelijk hiervoor geen wachtwoordzin te gebruiken.
Door geen wachtwoordzin te gebruiken wordt voorkomen dat bij iedere herstart de wachtwoordzin opnieuw ingegeven moet worden. Wees ervan bewust dat dit praktisch is, maar wel een veiligheidsrisico oplevert.
Om de sleutels voor een certificaat aanvraag (Certificate Signing Request (CSR)) te maken kan de volgende opdracht worden gebruikt:
openssl genrsa -des3 -out server.key 1024
Er wordt om een wachtwoordzin gevraagd (minimaal 4 karakters, meer is wenselijk voor een goede beveiliging).
naam@ubuntu-nl:~$ openssl genrsa -des3 -out server.key 1024 Generating RSA private key, 1024 bit long modulus .........++++++ ........++++++ e is 65537 (0x10001) Enter pass phrase for server.key: Verifying - Enter pass phrase for server.key:
Er is nu een sleutel gemaakt in bestand server.key. Maak nu een andere sleutel zonder wachtwoordzin en hernoem de sleutels.
openssl rsa -in server.key -out server.key.insecure mv server.key server.key.secure mv server.key.insecure server.key
Bij de openssl opdracht wordt om de eerder ingegeven wachtwoordzin gevraagd:
naam@ubuntu-nl:~$ openssl rsa -in server.key -out server.key.insecure Enter pass phrase for server.key: writing RSA key
De onbeveiligde sleutel is nu server.key en dit bestand kan gebruikt worden voor een certificaat aanvraag (CSR) zonder wachtwoordzin met de opdracht:
openssl req -new -key server.key -out server.csr
Er wordt gevraagd om gegevens over de organisatie die voor de webserver verantwoordelijk is.
naam@ubuntu-nl:~$ openssl req -new -key server.key -out server.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:NL State or Province Name (full name) [Some-State]: Locality Name (eg, city) []:Plaatsnaam Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ubuntu-NL-demo Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:Voornaam Achternaam Email Address []:email@adres.nl Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
De aanvraag in bestand server.csr kan gebruikt worden om een certificaat aan te vragen of om er een zelf-ondertekend certificaat mee te maken.
certificaat zelf ondertekenen
Om een zelf-ondertekend certificaat te maken kan de volgende opdracht gebruikt worden:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Het certificaat is opgeslagen in bestand server.crt.
Waarschuwing: Voor een productie server is een door een CA digitaal ondertekend certificaat nodig. Het is niet aanbevolen hiervoor een zelf-ondertekend certificaat te gebruiken.
Certificaat installeren
De sleutel (server.key) en het zelf-ondertekend certificaat (server.crt), of het door de CA geleverde certificaat, kunnen met de volgende opdracht worden geïnstalleerd:
sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private
Nu de certificaten zijn geinstalleerd kan de Apache webserver deze gebruiken voor https, maar ook Dovecot voor imaps en pop3s, enz.
Apache2 https configuratie
Door de module mod_ssl kan de Apache2 webserver gebruikt worden voor een versleutelde verbinding via https (http over ssl).
De modudule mod_ssl is beschikbaar in het pakket apache2-common en kan met de volgende opdracht worden geactiveerd:
sudo a2enmod ssl
Er is een standaard https configuratie in /etc/apache2/sites-available/default-ssl. In deze standaard https configuratie wordt gebruik gemaakt van een door Ubuntu ondertekend certificaat (ssl-cert-snakeoil.pem) en sleutelbestand (ssl-cert-snakeoil.key).
Neem in configuratiebestand /etc/apache2/sites-available/default-ssl de zojuist gemaakte sleutel en certificaat op:
sudo nano /etc/apache2/sites-available/default-ssl
#vervang de regels: # SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem # SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key #door regels met eigen certificaat en sleutel SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key
Om de webserver voor https te configuren:
sudo a2ensite default-ssl
En herstart de Apache webserver om de nieuwe instellingen te gebruiken:
sudo /etc/init.d/apache2 restart
De webserver is te benaderen via http://url/ ; dit is nu ook mogelijk via https://url/.
Gebruik zelf-ondertekend certificaat
Als het om een zelf-ondertekend certificaat gaat zal de browser een melding geven als de https site wordt bezocht:
Kies voor een uitzondering toevoegen:
Kies beveiligingsuitzondering bevestingen. Eventueel kan eerst het certificaat worden weergegeven:
Voor gebruik van https op internet moet mogelijk poort 443 worden ingesteld op de internetrouter (port forwarding).
Voor dit artikel is gebruik gemaakt van de Ubuntu Server Guide.