alexdpsg.net in https

Aloha,

nach ein wenig rumgebastel gibt es endlich fast den ganzen server mit https,

Nun mal eine kleine erklärung…. ssl ist eigentlich ja toll, so toll das man damit verdammt viel geld machen kann - man kann das ganze aber auch  für umme veranstalten.

Da ich das ganze nicht schon wieder in einem jahr mir zusammen suchen will schreib ich gleich mal ein Tutorial für ssl auf vhosts mit Wordpress etc.

Also alles auf Anfang! Eigentlich wollte ich nur die Login Seite sowie das Backend von Wordpress mit ssl absichern, darauß wurde mehr, also ein komplettes tutorial für ssl mit apache auf Ubuntu

als erstes bearbeiten wir die “ports.conf” diese findet sich unter /etc/apache2/, diese sollte die 2 einträge aus dem vHosts Turorial enthalten NameVirtualHost *:80 Listen 80

Diese erweitern wir um NameVirtualHost *:443 listen 443 SSLStrictSNIVHostCheck off

in der ports.conf findet sich auch der folgende eintrag( wenn nicht einfügen)

</span> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. # Listen 443 </IfModule>

</span> Listen 443 </IfModule>

Nun kennt der Apache2 schonmal die ports auf denen er lauschen darf. Der Obrige eintrag mit “SSLStrictSNIVHostCheck off” soll eigentlich dafür sorgen das der Apache unter vHosts mehrere ssl seiten betreiben kann, wenn der Browser vom Nutzer das auch mitmacht. [ Mobile Devices fallen raus].

Nun kommen wir zu den Zertifikaten. Diese werden mittels openssl generiert, selbst signierte Zertifikate sind nun auch schon relativ langweilig, also erstellt man sich erst eine “root CA” um mit dieser alle anderen Zertifikate zu Signieren. Dazu braucht es erstmal das openssl paket und eine gewisse datei/ordner Struktur um am ende noch den Überblick zu haben. apt-get install openssl Wir wechseln in den Ordner /etc/ssl und legen dort ein paar ordner an “mkdir crl newcerts private” zudem legen wir eine index.txt und eine serial datei an, die serial datei erstellen wir mit echo “01” > serial

Nun erstellen wir das root CA mit folgendem openssl befehl

“openssl req -new -x509 -extensions v3_ca -key private/cakey.pem \ -out cacert.pem -days 3650 -config openssl.cnf”

Nun werden wir unterschiedliche sachen gefragt unteranderem so geschichten wie(wichtige dinge in rot) Country Name (2 letter code) [AU]: DE State or Province Name (full name) [Some-State]: bla bla bla Locality Name (eg, city) []: irgendne stadt Organization Name (eg, company) [Internet Widgits Pty Ltd]: nochmehr bla bla bla Organizational Unit Name (eg, section) []: User blabla bla Common Name (eg, YOUR name) []: </span> Email Address []: info@</span>

zudem werden wir nach einem Passwort gefragt, linux ist bei einer passwort generation suuper “pwgen 1 20”  gibt ein 20 zeichen langes passwort zurück mit random zeichen, und da wir das passwort noch öfter brauchen machen wir ein wenig bash magic pwgen 1 20 > /etc/ssl/passwort

Nachdem wir nun ein Root CA besitzen welches gute 10 Jahre gültig ist, können wir ein Zertifikat für den blog erstellen. Damit man auch noch in einem Jahr das Zertifikat erkennen kann ist es halbwegs sinnig die dateien nach der subdomain zu benennen

openssl ca -out newcerts/blog_alexdpsg_crt.pem -config ./openssl.cnf -infiles newcerts/blog_alexdpsg_csr.pem

Bei dieser Zertifikat erstellung werden wir auch wieder sachen gefragt, diese sollten im groben mit dem Root CA übereinstimmen, bis auf die Common Name (eg, YOUR name) []: </span> hier müssen wir die Domain auf die Sub umstellen

Common Name (eg, YOUR name) []: blog.alexdpsg.net

Nun haben wir unser Zertifikat und unser root CA. Jetzt kommen wir zu den vHosts, als erstes wechseln wir in den /etc/apache2/sites-available/ ordner und kopieren uns einen vorhandenen vhost ( bei mir der vhost vom blog) und nenen ihn z.b ssl_blog

nun ist dieser noch auf  port 80 konfiguriert, dieses ändern wir nun durch mehrere einträge [ wichtige änderungen in rot]

<VirtualHost *:443> ServerAdmin </span> ServerName <dein_vhost_domain_tld:443> ServerAlias <dein_vhost_domain_tld:443> DocumentRoot /var/www/blog SSLEngine On SSLCertificateFile /etc/apache2/ssl/ssl_fuu_bar_crt.pem SSLCertificateKeyFile /etc/apache2/ssl/ssl_fuu_bar_key.pem <Directory /var/www/blog> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all </Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory “/usr/lib/cgi-bin”> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>

ErrorLog /var/log/apache2/error.log

Possible values include: debug, info, notice, warn, error, crit,

alert, emerg.

LogLevel warn

CustomLog /var/log/apache2/access.log combined </VirtualHost>

Im großen und ganzen geht es um die ersten paar zeilen der Konfiguration, der Virtualhost ändert sich von *:80 auf *:443( der ssl port) , die Variable ServerName/Alias bekommen an die adresse noch den port :443 angehängt und die SSL Eigenschaften werden durch SSLEngine On SSLCertificateFile /etc/apache2/ssl/ssl_fuu_bar_crt.pem SSLCertificateKeyFile /etc/apache2/ssl/ssl_fuu_bar_key.pem eingeschaltet, jetzt noch die ssl mod im apache mit a2enmod einschalten

” a2enmod ssl”

und den apache2 einmal restarten

/etc/init.d/apache2 restart

und nun sollte der blog auch unter https://blog.alexdpsg.net erreichbar sein ;)