• Vastliggende pagina
  • Info
  • Bijlages

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.

taskselwebserver.png

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.

Info <!> 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.

Info <!> 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.

Info <!> 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

Info (!) 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:

beveiligdeverbindingmislukt.png

Kies voor een uitzondering toevoegen:

beveiligingsuitzonderingtoevoegen.png

Kies beveiligingsuitzondering bevestingen. Eventueel kan eerst het certificaat worden weergegeven:

certificaatweergeven.png

httpsworks.png

Info (!) 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.


CategoryNetwerkenEnServers

community/WebserverHttps (laatst bewerkt op 2010-11-24 12:03:18 door rachidbm)