Lokaal ontwikkelen met Apache2 en SSL certificaat
Dit artikel geeft een korte instructie om je eigen Certificate Authority te maken waarmee je zelf SSL certificaten maakt om lokaal te kunnen ontwikkelen.
Wat gaan we opzetten?
- Lokale Root Certificate Authority
- Een SSL certificaat met een SAN extensie zodat meerdere domeinnamen via 1 certificaat kunnen lopen
- Basis Apache2 configuratie om het SSL certificaat in gebruik te namen
- Redirect non-ssl to ssl versie
Root Certificate Authority opzetten
Het Root CA is nodig om de lokaal uitgegeven certificaat te ondertekenen. Nadat het RootCA is gemaakt kan je deze zelf op elk apparaat installeren, zodat je eigen uitgegeven certificaten vertrouwd worden. Deze stap is maar 1 keer nodig.
Maak eerst een directory aan waar je alles in op wilt slaan, bijvoorbeeld in /etc/apache2/ssl
en ga naar deze directory.
Private key maken
Maak eerst een private key aan met een wachtwoord. Het is belangrijk dat je dit wachtwoord goed bewaard, deze ben je iedere keer nodig als je een nieuw certificaat wilt uitgeven.
openssl genrsa -out rootCA.key 4096
Certificaat maken voor de RootCA
Geef nu de opdracht om op basis van de private key het certificaat voor de RootCA te maken. Nadat je deze opdracht hebt gegeven worden er een aantal vragen gesteld.
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt
Beantwoord nu de volgende vragen (natuurlijk wel met je eigen informatie)
Country Name (2 letter code) []:NL
State or Province Name (full name) []:Overijssel
Locality Name (eg, city) []:Vroomshoop
Organization Name (eg, company) []:Elitelabs
Organizational Unit Name (eg, section) []:Elitelabs Root CA
Common Name (eg, fully qualified host name) []:
Email Address []:ca@elitelabs.nl
Je eigen RootCA is nu gemaakt en klaar voor gebruik.
Lokaal certificaat maken
In dit voorbeeld maak ik 1 certificaat aan die voor meerdere domeinnamen gebruikt kan worden.
Configuratie voor SAN extensie maken
SAN staat voor Subject Alternative Name en is een extensie die we kunnen gebruiken in een enkel certificaat. Simpel gezegd geeft het een lijst weer van domeinnamen die bij dit certificaat horen.
Lokale certificaten kunnen worden gebruikt om een VirtualHost in Apache zonder fouten of waarschuwingen te kunnen benaderen.
Maak het bestand localdev.ext
aan en vul deze als volgt:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localdomain1.int
DNS.2 = localdomain2.int
Private key voor lokaal certificaat maken
openssl genrsa -out localdev.key 2048
CSR maken
CSR staat voor het Certificate Signing Request. Dit CSR bevat alle informatie omtrend het certificaat. Deze maken we aan op basis van de private key.
openssl req -new -key localdev.key -out localdev.csr
Beantwoord vervolgens de vragen met je eigen informatie. Let op dat de Common Name niet gelijk hoeft te zijn aan de domeinnaam die je wilt gebruiken. Deze worden straks door de SAN extensie afgehandeld.
Country Name (2 letter code) []:NL
State or Province Name (full name) []:Overijssel
Locality Name (eg, city) []:Vroomshoop
Organization Name (eg, company) []:Elitelabs
Organizational Unit Name (eg, section) []:Elitelabs Engineering
Common Name (eg, fully qualified host name) []:
Email Address []:info@elitelabs.nl
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
4. Lokaal certificaat maken
We zijn nu klaar en kunnen ons certificaat maken. Let op dat tegenwoordig certificaten maximaal 365 dagen geldig mogen zijn. Als je deze waarde verhoogd, zal deze afgewezen worden door je browser.
openssl x509 -req -in localdev.csr \
-CA rootCA.crt \
-CAkey rootCA.key \
-CAcreateserial \
-out localdev.crt \
-days 365 \
-sha256
Nadat je de opdracht gegeven hebt, moet je het wachtwoord invullen van je RootCA en het certificaat wordt gemaakt.
Controleer dat je de volgende bestanden nu hebt:
- localdev.csr - Certificate Signing Request
- localdev.key - Private key voor het lokale certificaat
- localdev.crt - Het lokale certificaat
RootCA installeren op de lokale machine
Globaal moet je ervoor zorgen dat jouw lokale systeem het zojuist gemaakte RootCA vertrouwd. Dit kan verschillen per machine.
MacOs
- Open de
Keychain Access.app
- Klik links op 'login'
- Klik op 'Bestand' en dan 'Importeer items...'
- Kies het bestand
/etc/apache2/ssl/rootCA.crt
- Zoek de RootCA op in de lijst met certificaten en dubbelklik hierop.
- Open de 'Trust' sectie en pas deze aan zoals onderstaande afbeelding

Sluit het venster. Mogelijk is dat je dit moet bevestigen met je eigen wachtwoord.
Linux
todo
Windows
todo
Apache configuratie
#
# Non-SSL, permanent redirect to SSL
#
<VirtualHost *:80>
ServerName localdomain1.int
Redirect permanent "/" "https://localdomain1.int/"
</VirtualHost>
#
# SSL host, using certificates
#
<VirtualHost *:443>
# ...
ServerName localdomain.int
# ...
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/localdev.crt
SSLCertificateKeyFile /etc/apache2/ssl/localdev.key
</VirtualHost>