Blog / development

Unsere erste Open-Source-Software: Kontoumsätze automatisch abrufen, ohne dass jemand anderes ans Konto kommt

Kontoauszüge von Hand hoch- und runterladen muss nicht sein. Unser Open-Source-Werkzeug holt die Umsätze per FinTS ab – betrieben vom Kontoinhaber selbst.

Symbolbild: Wasser fließt in der Abenddämmerung durch ein schmales Tor in eine steinerne Rinne – nur in eine Richtung

Kontoauszüge, die niemand mehr hochladen muss

Wer seine Kontoumsätze in einer Buchhaltung oder einem Zahlungsabgleich braucht, kennt den Ablauf: im Online-Banking anmelden, Auszug herunterladen, in der anderen Anwendung wieder hochladen. Einmal im Monat ist das lästig, täglich ist es ein Hindernis.

Wir hatten dieses Problem gleich zweimal: bei unserer eigenen Buchhaltung, die wir gerade neu aufbauen, und bei unserem Zahlungsabgleich für Arztpraxen. Herausgekommen ist ein kleines Werkzeug, das wir als unsere erste Open-Source-Software veröffentlicht haben: fints2camt.

Die Herausforderung

Deutsche Banken bieten mit FinTS seit Jahren eine Schnittstelle, über die Programme Kontoumsätze abrufen können. Banking-Programme auf dem eigenen Rechner nutzen sie täglich. Für eine Anwendung, die Umsätze für ihre Kunden verarbeitet, ist es trotzdem nicht so einfach:

  • Wer fremde Konten abruft, ist ein Kontoinformationsdienst. Ruft ein Dienstleister die Konten seiner Kunden ab und bereitet sie auf, braucht er dafür eine Registrierung bei der BaFin – mit Geschäftsplan, Versicherung und laufender Aufsicht.
  • PIN und TAN gehören nicht zu einem Dienstleister. Wer die Online-Banking-Zugangsdaten seiner Kunden speichert, wird selbst zum lohnenden Angriffsziel.
  • Die Bank verlangt regelmäßig eine Freigabe. Etwa alle 90 Tage muss der Kontoinhaber den Abruf in seiner TAN-App bestätigen. Ein Programm, das dann bei jedem Lauf eine neue Anfrage startet, verschickt eine Push-Nachricht nach der anderen.
  • Banken liefern unterschiedliche Formate. Manche geben die Umsätze im modernen camt-Format heraus, andere nur im älteren MT940.
  • Jede Anwendung bräuchte ihren eigenen Bankzugang. Buchhaltung, Zahlungsabgleich, Auswertung: Jedes System müsste FinTS selbst sprechen.

Unsere Lösung

1. Der Kontoinhaber betreibt die Software selbst

fints2camt läuft nicht bei uns, sondern auf einem Server des Kontoinhabers, als Docker-Container. Er hat keine Oberfläche, öffnet keinen Port und läuft nicht dauerhaft: Ein Zeitplan startet ihn, er holt die Umsätze ab, liefert sie aus, schreibt ein kurzes Protokoll und beendet sich. Die PIN liegt nur auf diesem Server, die TAN-Freigabe gibt der Kontoinhaber selbst in seiner App. Damit greift auch nur er selbst auf sein Konto zu.

Die beste Lösung war hier kein weiterer Dienst, sondern ein Werkzeug, das der Kunde selbst in der Hand hat.

2. Ein Format für alle Ziele

Was die Bank liefert, gibt fints2camt einheitlich als camt.053 aus, den europäischen Standard für Kontoauszüge. Liefert die Bank camt, wird es durchgereicht, liefert sie MT940, wird es umgewandelt. Jeder Auszug wird vor dem Versand gegen das offizielle Schema geprüft. Wohin er geht, legt eine Konfigurationsdatei fest: per HTTPS an eine beliebige Schnittstelle oder in einen Ordner. Unsere Buchhaltung ist ein solches Ziel, ebenso jedes andere System, das camt versteht.

3. Freigabe ohne Push-Flut, Schutz vor der Sperre

Verlangt die Bank eine Freigabe, stößt fints2camt sie genau einmal an und wartet einige Minuten. Kommt die Bestätigung nicht, meldet es „Freigabe nötig“ und startet bei den folgenden Läufen keine neue Anfrage, bis der Kontoinhaber die Freigabe selbst anstößt. Lehnt die Bank die Anmeldung zweimal hintereinander ab, etwa nach einer geänderten PIN, hört das Programm auf, es weiter zu versuchen. Die meisten Banken sperren den Zugang nach dem dritten Fehlversuch; diesen behält der Kontoinhaber in der Hand.

4. Sicherheit, die man nachprüfen kann

Bei einer Software, der man seine Bank-PIN anvertraut, sollte niemand auf unser Wort angewiesen sein. Deshalb ist der Quellcode offen und unter der Apache-2.0-Lizenz frei nutzbar. Vor der Veröffentlichung haben wir ihn gezielt auf Sicherheit geprüft: Geheimnisse im Code und in der Historie, bekannte Lücken in Abhängigkeiten, die Behandlung von PIN und Token, XML-Angriffe, Dateirechte. Alle Abhängigkeiten sind mit Prüfsummen fixiert. Das Container-Image wird auf GitHub gebaut, mit Herkunftsnachweis und Stückliste versehen und signiert, sodass jeder Betreiber prüfen kann, dass es aus genau diesem Quellcode stammt.

Das Ergebnis

  • fints2camt ist veröffentlicht – Quellcode auf GitHub unter Apache-2.0, Container-Image für amd64 und arm64.
  • Keine Zugangsdaten bei uns: PIN und TAN bleiben beim Kontoinhaber, der Container öffnet keinen Port.
  • Ein Format für jedes Ziel: camt.053 per HTTPS oder als Datei, aus camt oder MT940.
  • Unsere Buchhaltung nimmt die Lieferungen bereits an, mit einem eigenen Zugang je Firma.

fints2camt liest nur. Überweisungen kann es nicht auslösen, die bleiben in der Banking-App. Wer die Software für eigene Zwecke einsetzt, braucht eine eigene FinTS-Produktregistrierung bei der Deutschen Kreditwirtschaft; sie ist kostenlos, wie das geht, steht im README.

Fazit

Wenn eine Anwendung Kontoumsätze braucht, muss sie nicht selbst an die Konten ihrer Nutzer. Ein kleines, offenes Werkzeug beim Kontoinhaber holt die Umsätze ab und übergibt sie in einem Standardformat – und die Zugangsdaten bleiben, wo sie hingehören.

Der Code liegt auf GitHub: github.com/extdev-gmbh/fints2camt. Hinweise auf Sicherheitslücken nehmen wir unter [email protected] entgegen.

Ihre Anwendung soll Kontoumsätze automatisch bekommen?

Wir schauen uns gemeinsam mit Ihnen an, wie Ihre Buchhaltung, Ihr Portal oder Ihre Fachanwendung die Umsätze ohne Handarbeit erhält.

Projekt besprechen
Christopher Zechendorf
Christopher Zechendorf Christopher Zechendorf leitet die ext.dev GmbH und bringt über 25 Jahre Erfahrung in Webentwicklung, CMS-Systemen und Infrastruktur mit.