Ruby Webserver Thin mit Let’s Encrypt SSL Zertifikat

ssl

Hallo, heute geht es um das Thema Ruby Webserver Thin mit Let’s Encrypt SSL Zertifikat. Das beinhaltet den Webserver Thin und dessen Betrieb mit einem SSL Zertifikat von Let’s Encrypt. Thin ist ein mächtiger und schneller Webserver für Ruby. Er ist flotter als das Apache Plugin Passenger und unterstützt im Gegensatz zu Passenger auch Websockets. Es ist damit auch ein Chat umzusetzen.

Fangen wir mal mit dem Zertifikat an:

Ich setze mal voraus, das wir von einem Linux Server sprechen. In allen aktuellen Linux Versionen, wie Debian 9, kann man certbot, das Lets‘ Encrypt Taschenmesser aus dem Repo installieren:

sudo apt install certbot

Dann kommst die Erstellung des Zertifikates:

sudo certbot certonly --standalone -d chat.demo.org

Wenn ein Apache läuft muss er währen der Erstellung des Zertifikates beendet werden:

sudo service apache2 stop

Eine umfassende Anleitung findest du hier direkt bei Let’s Encrypt.

Nach der Erstellung des Zertifikates startet den Webserver wieder:

sudo service apache2 start

Der private Schlüssel und das Zertifikat liegen unter:

/etc/letsencrypt/chat.demo.org/live

cert.pem
chain.pem
fullchain.pem
privkey.pem

Das Webroot der Seite befindet sich unter:

/var/www/chat.demo.org

Ich habe hier ein Startscript erstellt und in den Cron eingebunden:

/root/scripts/thin_restart.sh
#!/bin/bash

cd /var/www/chat.demo.org

COUNT=$(ps -ef |grep thin|grep 8443|grep thin|wc -l)
if [ $COUNT -lt 1 ]; then
thin -p 8443 -a 1.2.3.4 -d -l /var/www/chat.demo.org/app8443.log -P /tmp/pids/thin8443.pid –ssl –ssl-disable-verify –ssl-key-file /etc/letsencrypt/live/chat.demo.org/privkey.pem –ssl-cert-file /etc/letsencrypt/live/chat.demo.org/fullchain.pem -R config.ru start
fi

Dieses Script überprüft, ob der Server als Prozess noch läuft und startet ihn gegebenfalls neu.
Zerlegen wir doch mal den Aufruf

-p 8443 -> der Server läuft auf Port 8443
-a 1.2.3.4 -> das ist die IP Adresser auf der der Server läuft (bitte nicht localhost 😉 )
-d -> der Thin Server läuft als Daemon, der Prozess wird also in den Hintergrund geschoben und bleibt auch bei Abmeldung bestehen
-l /var/www/chat.demo.org/app8443.log -> das ist das Logfile
-P /tmp/pids/thin8443.pid -> hier legt der prozess seine Prozessid ab
–ssl -> SSL wird aktiviert
–ssl-disable-verify -> Clientzertifikate werden nicht akzeptiert, wichtig!!!!
–ssl-key-file /etc/letsencrypt/live/chat.demo.org/privkey.pem -> der private Schlüssel
–ssl-cert-file /etc/letsencrypt/live/chat.demo.org/fullchain.pem -> das zertifikat
-R config.ru start -> das Rac File

Hier noch der Aufruf via Cron:
*/10 * * * * /root/scripts/thin_restart.sh >/var/log/thin_restart.sh.log 2>&1

Mit dieser Konfiguration läut der Thin sauber mit SSL.
Was noch zu erwähnen ist, ist das der Websocket dann auch via SSL angesprochen werden muss, er ist ja unverschlüsselt nicht mehr erreichbar. Aufgrund der Entwicklungsumgebung, die nicht mit SSl lauft, habe ich im clientseitigen Aufruf eine Fallunterscheidung eingebaut.

chat.js
if (document.location.protocol=='http:') {
wsUri = "ws://localhost:9000";
}
else {
wsUri = "wss://localhost:8443";
}

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close