Vanaf vandaag zijn mijn website’s met https te bereiken. Om dit mogelijk te maken moest ik even wat dingen uitvogelen:
Stap 1: Meerdere SSL website’s op 1 ip adres laten draaien (Ik had mijn webacces al op https, dus de andere moesten erbij geprutst worden.) keyword: SNI.
Stap 2: De websites van verschillende hosts (mailserver draait op andere host dan de www server) op dezelfde poort naar buiten. keyword: reverse proxy.
Stap 3: redirect voor http naar https instellen.
Stap 1: SSL Virtualhosts maken:
Om de website’s op 1 IP adres te laten draaien moet je virtual hosts configureren; waarbij je iedere site een eigen naam geeft. Dit staat hier al ergens uitgelegd, maar voor SSL/HTTP site’s komt hier nog SNI bij (Server Name Indiciation) Om dit goed te laten werken op apache 2.4 moet om een of andere vage reden de config van de verschillende ssl virtual-hosts in 1 bestand zitten. Heb het met meerdere geprobeerd: no go. Dus hier is mijn (vereenvoudigde) ssl.config:
ServerName gerrit.doornenbal.org
DocumentRoot /var/www/gerrit
<Directory “/var/www/gerrit”>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/dehydrated/certs/gerrit.doornenbal.org/cert.pem
SSLCertificateKeyFile /etc/dehydrated/certs/gerrit.doornenbal.org/privkey.pem
SSLCertificateChainFile /etc/dehydrated/certs/gerrit.doornenbal.org/chain.pem
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!eNULL:!kECDH:!aDH:!RC4:!3DES:!CAMELLIA:!MD5:!PSK:!SRP:!KRB5:@STRENGTH
</VirtualHost>
<VirtualHost *:443>
ServerName www.doornenbal.org
DocumentRoot /var/www/www
<Directory “/var/www/www”>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/dehydrated/certs/www.doornenbal.org/cert.pem
SSLCertificateKeyFile /etc/dehydrated/certs/www.doornenbal.org/privkey.pem
SSLCertificateChainFile /etc/dehydrated/certs/www.doornenbal.org/chain.pem
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite “EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS”
</VirtualHost>
Met deze configuratie kon ik beide websites onafhankelijk van elkaar via https benaderen!
Stap 2: SSL Reverse proxy configuratie:
Volgende stap was om de SSL pagina vanaf een andere interne server erbij te plakken. Dit kun je standaard met apache doen met de mod-proxy module:
Vervolgens de Virtualhost voor de reverse proxy bij de ssl.config geplakt:
ServerName mijnemail.doornenbal.org
SSLProxyEngine On
ProxyPreserveHost On
SSLEngine on
SSLCertificateFile /etc/dehydrated/certs/server.doornenbal.org/cert.pem
SSLCertificateKeyFile /etc/dehydrated/certs/server.doornenbal.org/privkey.pem
SSLCertificateChainFile /etc/dehydrated/certs/server.doornenbal.org/chain.pem
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite “EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS”
ProxyPass / https://192.168.1.13/
ProxyPassReverse / https://192.168.1.13/
</VirtualHost>
Hier even wat uitleg: De interne server heeft in de geval ip adres 192.168.1.13, en wordt over https benaderd. Om hier geen problemen te krijgen (MITM attacks) moet je het certificaat ook op de proxy-server installeren en configureren.
Stap 3: Redirect voor http naar https instellen.
Als alle bovenstaande goed werkt, is de volgende stap om http uit te schakelen. Nu is dat dus niet altijd even netjes, dus je kunt beter een vaste redirect instellen. Dit is heel simpel. Vervang de (oude) http Virtualhost configuratie met de volgende configuratie:
ServerName gerrit.doornenbal.org
Redirect permanent / https://gerrit.doornenbal.org/
</VirtualHost>
SSL Security.
Het is je vast wel opgevallen: ik heb naast de SSL Certificate files ook nog een paar andere settings toevoegd. Deze zijn nodig om een veilig SSL protocol gebruik af te dwingen, zodat je de SSL verbinding die je gaat opzetten ook daadwerkelijk veilig is! SSLv2 en SSLv3 zijn bijvoorbeeld gekraakt, dus niet veilig meer. Daarnaast zijn een groot aantal algorithmen die voor SSL verkeer (werden) gebruikt ook niet veilig meer, dus deze heb ik ook uitgeschakeld.
Een goede website om dit te checken is https://www.ssllabs.com/ssltest/. Met bovenstaande settings kom ik nu (april 2017) op een A rating. niet slecht. :-).