dec 16, 2024

SSL i XamPP

Hvis du har fået Virtual Host til at fungere, så er websiden stadigt usikker, og det er fordi at den benytter sig af http – protokollen som lytter på port 80. Det er muligt at oprette en sikkerhedscertifikat og tilhørende nøgle på XamPP, men det kun til den lokale maskine. Man kan ikke bruge det på et webhotel. Det skal konfigureres af webhotellets administration, eller ved brug af WordPress, så et SSL plugin.

I Apache findes der en bat-fil, hvor man kan oprette certifikat og nøgle, men desværre mangler der mulighed for at specificere domæner. Batfilen ser således ud.
 
@echo off
set OPENSSL_CONF=./conf/openssl.cnf

if not exist .\conf\ssl.crt mkdir .\conf\ssl.crt
if not exist .\conf\ssl.key mkdir .\conf\ssl.key

bin\openssl req -new -out server.csr
bin\openssl rsa -in privkey.pem -out server.key
bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365

set OPENSSL_CONF=
del .rnd
del privkey.pem
del server.csr

move /y server.crt .\conf\ssl.crt
move /y server.key .\conf\ssl.key

echo.
echo -----
echo Das Zertifikat wurde erstellt.
echo The certificate was provided.
echo.
pause
 
Der mangler at læse ind en parameter, der angiver tilknytning mellem DNS og adresserne. Dette skal opbevares i en fil. en fil ved navn V3.ext

og desuden ønsker vi at certifikatet gælder lidt længrere end i et år. Vi kan bruge hvilket som helst antal dage, men jeg har valgt 1825, ca 5 år. Batfilen skal vide, at den skal læse en ext-fil ind, så derfor tilføjer vi -extfile v3.ext, så bin\openssl x509  – linjen laver vi om som følger:

bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 1825 -extfile v3.ext

Oplysningerne om domæne i v3.ext filen skal se ud som følger ( vores tilfælde)
 
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage =digitalSignature, nonRepudiation, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = *.dev.kfmh.dk
DNS.3 = dev.kfmh.dk
DNS.4 = 127.0.0.1
DNS.5 = 127.0.0.2
 
Gem denne fil  og den ændrede batfil – og kør batfilen. Når man gør det, skal man angive en adgangskode. Det skal være en, der er let at huske, for den får man brug for senere. Derefter beder programmet om forskellige oplysninger, som er lige ud ad landevejen, indtil man kommer til angivelse af navn. Her skal man skrive det domæne, som skal gøres sikkert. I vores tilfælde bliver det dev.kfmh.dk. Alle oplysningerne skal stå som ovenstående. En lille trykfejl vil resultere i at vi ikke får genereret det rigtige certifikat og eller, at Apache ikke starter op ved genstart, men går i fejl.  Hvis alt dette går godt, så skal en virtual host med port 443 oprettes.

 

Vi opretter en ny virtual host, som følger
 
<VirtualHost *:443>
   ServerAdmin webmaster@dev.kfmh.dk
      DocumentRoot "/xampp/apps/xampp-portable-windows-x64-8.2.12-0-VS16/xampp/htdocs/kfmh"
   ServerName dev.kfmh.dk
   ServerAlias kfmh
   ErrorLog "logs/dev.kfmh.dk-error.log"
   CustomLog "logs/dev.kfmh.dk-access.log" common
   SSLEngine on
   SSLCertificateFile "conf\ssl.crt\server.crt"
   SSLCertificateKeyFile "conf\ssl.key\server.key"
   ##check with openssl req –noout –text –in dev.kfmh.dk.csr
</VirtualHost>
 
Så gemmer man filen, og genstarter Apache serveren. Og hvis den går i fejl, kan der være en trykfejl

Når man opretter et certifikat ved makecert.bat så bliver certifikatet lagt i en fil med stien “conf\ssl.crt\server.crt” og nøglen i stien
conf\ssl.key\server.key” For at få det hele til at virke skal man så specificere SSLEngine on og så de to filnavne som i det grøn-markerede linjer i ovenstående definition af Virtual Host. Memh.dk n hvis den virker korrekt, og man taster https://dev.kfmh.dk i browserens adressefelt, så  burde man komme til siden via port 443 som en sikker forbindelse.

Herefter mangler vi kun at sørge for at vi altid lander på https siden. Og det skal vi gøre i den virtuelle host for port 80. Vi tilføjer linjer  så specifikationen for de virtuelle host er som følger:
 

<VirtualHost *:80>
    ServerAdmin webmaster@dev.kfmh.dk
    DocumentRoot "/xampp/apps/xampp-portable-windows-x64-8.2.12-0-VS16/xampp/htdocs/kfmh"
    ServerName dev.kfmh.dk
    ServerAlias kfmh
    ErrorLog "logs/dev.kfmh.dk-error.log"
    CustomLog "logs/dev.kfmh.dk-access.log" common
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.dev.kfmh.dk [OR]
    RewriteCond %{SERVER_NAME} =dev.kfmh.dk 
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}[END,NE,R=permanent]
</VirtualHost>

 
Vi skal omdirigere alle forespørgsler via www.dev.kfmh.dk og dev.kfmh.dk, som jo går via http og port 80 til at blive omdirigeret til https serveren. Først starter man RewriteEngine, så specificerer man tilfældene, hvor der skal omdirigeres, og til sidst en RewriteRule som siger at de skal gå via https. Specielt de grønne linjer skal stå præcist sådan, for ellers kan man ikke genstarte Apache.
 
Så gemmer man filen, og genstarter Apache serveren. Og hvis den går i fejl, kan der være en trykfejl.
 
Men hvis man kommer igennem, så skulle dev.kfmh.dk altid vises som en sikker forbindelse via SSL.

More Details