Anwendung „Vereinsverwaltung“ zeigt Möglichkeiten von Nuclos

Nach längerer Vorlaufzeit freuen wir uns über die Veröffentlichung eines Praxisartikels zum ERP-Baukasten Nuclos in der c’t-Ausgabe 20/2016! Wenn Sie auch in der EDV lieber Ihr eigenes Projekt umsetzen möchten statt auf eine Fertiglösung zurück zu greifen, die am Ende doch nicht so ganz passt, finden Sie hier einen Einstieg. In einem „Nuclet“ haben wir zur Veranschaulichung der Flexibilität und Leistungsfähigkeit von Nuclos einige typische Verwaltungsaufgaben bearbeitet, die sich in den meisten Vereinen stellen: Abteilungen, Mitgliedschaften und Beitragsabrechnungen wollen gepflegt und erstellt werden. Als besondere Spezialität gibt es ein kleines Modul zur Verwaltung von Gemeinschaftsdiensten, das von der Planung über den Aushang bis zur Anrechnung der geleisteten Stunden reicht. All das ist zwar keine fertige Gesamtlösung, bietet für ein Programmierbeispiel aber etwas Abwechslung von der üblichen Einheitskost.

 

Sichere Kommunikation mit Nuclos einrichten

Abhörsicher

Wer Nuclos selber betreiben möchte, sollte den Datenaustausch mittels HTTPS einrichten. Das ist die durch Verschlüsselung abhörsicher gemachte Variante von HTTP (Hypertext Transfer Protocol). Dafür benötigt der Anwendungsserver Tomcat ein Zertifikat, das man sich selbst ausstellen oder von einer autorisierten Stelle (Certifcate Authority – CA) bestätigen lassen kann. Die selbst ausgestellten Zertifikate sind nicht per se unsicherer, führen aber zu Sicherheitswarnungen von Oracle Java, das Zertifikate stets bei den CA’s validieren möchte. Novabit empfiehlt in seinen Installationshinweisen im Abschnitt „Konfiguration von HTTPS“ deshalb den Einsatz offizieller Zertifkate. Solche gibt es kostenlos von der Let’s-Encrypt-Initiative, die dann aber recht häufig aktualisiert werden müssen. Eine Suche nach „Letsencrypt tomcat“ liefert einschlägige Hinweise. Kostenpflichtige Zertifikate bieten unterschiedliche Laufzeiten und müssen entsprechend seltener angepasst werden. Für die teuren EV-Zertifikate mit „Extended Validation“ muss man ein „Doing business as“-Dokument, z.B. einen Eintrag im Gewerbe- oder Handelsregister, vorweisen können.

Auch bei unverschlüsselten Verbindungen über HTTP sendet Oracle Java Warnhinweise wegen mangelnder Sicherheit. Das sieht nicht nur unschön aus, sondern hat gute Gründe. Es ist durchaus möglich, das die unverschlüsselte Kommunikation zukünftig ganz unterbunden wird.

Verschlüsselung mit Reverse Proxy

Es ist möglich, Nuclos im internen Netzwerk unverschlüsselt über HTTP zu betreiben und die Verschlüsselung in Richtung Client mit einem Reverse Proxy zu gewährleisten. Der kommuniziert dann verschlüsselt mit dem Java- oder Webclient nach „draußen“ und nach „drinnen“ unverschlüsselt mit dem Nuclos-Tomcat. Dafür muss man aber sowohl die Konfiguration von Reverse Proxy als auch die des Nuclos-Tomcat entsprechend pflegen. Der Webclient kann in einem solchen HTTP/HTTPS-Mischbetrieb aufgrund von CORS-Problemen aber nicht verwendet werden. Ein Grund mehr, Nuclos generell für die Kommunikation per HTTPS einzurichten.

Konfigurationsbeispiel

Die folgenden Beispiele werden ohne Gewähr für Richtigkeit oder Funktionsfähigkeit gegeben. Sie müssen sie in Ihrer Umgebung prüfen und ggf. anpassen. Die Anforderungen an eine korrekte Verschlüsselung verändern sich auch mit der Zeit. Dennoch hier ein Hinweis für die Konfiguration der Tomcat-Engine (Version 7.0.63) und des Reverse Proxy nginx.

Szenario: Es wird HTTPS zwischen Client und Reverse Proxy verwendet, und der Reverse Proxy kommuniziert ebenfalls per HTTPS mit Nuclos, um die o.g. CORS-Probleme mit dem Webclient zu vermeiden.

In der Datei server.xml (Pfad abhängig von Nuclos-Installation, z.B. /opt/nuclos/tomcat/apache-tomcat-7.0.63/conf/server.xml).

<Connector SSLEnabled="true"
           clientAuth="false"
           keystoreFile="/opt/nuclos/extra/.keystore"
           keystorePass="ihrgeheimespasswort"
           maxThreads="150"
           port="443"
           protocol="HTTP/1.1"
           proxyName="nuclos.irgend.wo"
           proxyPort="443"
           scheme="https"
           secure="true"
           sslProtocol="TLS"/>

Und so kann die Konfiguration für den Reverse Proxy „nginx“ aussehen:

server {
    listen       443;
    server_name  nuclos.irgend.wo;
    location /nuclos {
          proxy_set_header X-Forwarded-Host $host;
          proxy_set_header X-Forwarded-Server $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto "https";
          proxy_pass https://nuclos.local:443/nuclos;
          proxy_redirect off;
    }
    location /webclient {
          proxy_set_header X-Forwarded-Host $host;
          proxy_set_header X-Forwarded-Server $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto "https";
          proxy_pass https://nuclos.local:443/webclient;
          proxy_redirect off;
    }
}