Datenbankverbindung mit Zertifikat absichern.

Oneixee5

Top Contributor
Die Java-Anwendung eines Kunden in einer Kubernetes-Instanz soll sich gelegentlich mit einer DB im Rechenzentrum verbinden können. Normalerweise würde die Verbindung auf genau eine IP-Adresse eingeschränkt. Das ist aber bei einer Kubernetes-Instanz nicht möglich, da diese immer IP-Ranges bereitstellt. Jetzt kam die Überlegung auf, die Anwendung per Zertifikat (JDBC) zu identifizieren. Ein selbst erstelltes Zertifikat würde dafür ausreichen, es sind nur vertrauenswürdige Netze usw. im Spiel. So weit so gut. ich kenne zwar die Grundlagen für sowas, aber verwende das ganz selten mal. Ein Zertifikat muss aber irgend wann einmal erneuert werden. Wie kann man das automatisiere? Da ein selbst erstelltes Zertifikat kein Stammzertifikat einer CA hat, kann man vermutlich nicht einfach darauf vertrauen, dass ein Zertifikat auch vom Kunden ausgestellt wurde. Sonst würde ich vorschlagen, dass eine neue Version immer ein neues Zertifikat mitbringt. Die Anwendung kann im Prinzip nicht "veralten", da in der Kubernetes-Instanz alle Anwendungen regelmäßig auf Sicherheitsprobleme gescannt werden. Sobald eine mit Level "High" gefunden wird, wird der Betreiber informiert und nach ein paar Stunden ohne Update wird die Anwendung gestoppt. Es gibt quasi keine Version die älter als ein Monat ist.
 

KonradN

Super-Moderator
Mitarbeiter
Also ich habe da bei dem, was ich gelesen habe, direkt meine Bauchschmerzen muss ich gestehen...


Aber gehen wir das einmal im Detail durch:

a) Direkte Erwiderung (könnte man evtl. weglassen, rein technisch möglich, aber nein, würde ich nicht machen!)
Ein Zertifikat muss aber irgend wann einmal erneuert werden
Ja, aber das kannst Du ja beliebig festlegen, wenn Du das Zertifikat erstellst. Du kannst also hin gehen und ein Zertifikat erstellen, das in 100 Jahren abläuft. Hier ist aber die verwendete Software zu prüfen - nicht dass es da feste Grenzen gibt und z.B. Zertifikate pauschal abgelehnt werden, wenn diese in mehr als 368 Tagen ablaufen. (RFC 5280 gibt aber keine Grenzen und spricht nur von angemessener Dauer.)
Dieses Zertifikat muss dann auf beiden Seiten hinterlegt werden.

Aber natürlich kann man den Prozess auch automatisieren. Da es um ein einfaches selbsterstelltes Zertifikat gehen soll, brauchst Du dazu keine weiteren Tools als eben z.B. openssl. Mit einem Aufruf erzeugst Du dann das Zertifikat und legst es dann bei Client und Server ab.
(Also sowas wie openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 36500 wobei man noch weitere Argumente bräuchte um dann keine Eingaben mehr zu haben ...)
Aber auch hier ist es dann so: Du musst dann das Zertifikat überall hinterlegen. Da es keinen Trust gibt, hast du da kein automatischen Trust für ein erstelltes Zertifikat.

b) Was ich erwarten würde
Generell wäre da immer meine erste Frage: Hat die Firma keine PKI Infrastruktur? Das ist etwas, das ich eigentlich kenne von den meisten Kunden (Du scheinst da ja einen größeren Kunden zu haben, der mehrere sichere Netze hat mit Firewalls abgetrennt und so ...so klang es für mich). Daraus würde dann folgen:
a) Es gibt ein root Zertifikat und alle Systeme sollten diesem vertrauen.
b) Es gibt eine Infrastruktur, um Zertifikate zu beantragen, zu verlängern und und und ...

Zu dem Punkt b gehören dann in der Regel auch Automatismen (Irgendwie hatten Firmen, die ich so erlebt habe, immer certbot im Einsatz) für sowas.

Generell würde ich da immer Rücksprache mit den Verantwortlichen dort halten, denn ich habe da schon die Erfahrung gemacht, dass diese Gespräche sonst bei einem Security Audit eh automatisch kommen sobald da irgendwas mit Zertifikaten aufschlägt ... Aber das kann natürlich einfach nur mein subjektives Empfinden sein denn das sind natürlich Einzelfälle die ich mitbekommen habe.

c) Eigene Lösung, die ich evtl. bauen würde
Aber wenn es keine entsprechende Infrastruktur gibt, dann baut man sich diese einfach. Das bedeutet einfach, dass man eine CA aufbaut. Hört sich wild an - sind einfach nur openssl Aufrufe um Zertifikate zu erstellen.
Das gibt einem dann sozusagen ein root Zertifikat und der Server kann dann dem Zertifikat vertrauen. Bzw. den Clients, die da mit einem Client-Zertifikat ankommen.
Und dann kannst Du natürlich Zertifikate ausstellen. Die haben dann eine gewisse Laufzeit. Da diese von der ca ausgestellt wurden, traut der Server diesen. ==> Du musst da nichts weiter auf dem Server machen.

Damit baust Du da also ins Deployment einfach den entsprechenden Aufruf für ein aktualisiertes Zertifikat ein. Ist relativ unproblematisch und nur ein Aufruf.

Wenn man da ganz neu ist: Da findet sich sehr viel zu. Ich hatte das mal für ein VPN gemacht (OpenVPN und alle Systeme hatten sich mit Client Zertifikaten autorisiert) und damals hatte ich sogar eine Art "CA Baukasten" gehabt. Das war dann schon alles zusammen - man hatte da dann nur ein Archiv entpackt und dann gab es paar Skripte zur Initialisierung und so ... Aber das ist kein Hexenwerk.)

Aber wichtig: Der Part mit der CA ist dann sicherheitsrelevant. Da sollte man sich also paar Gedanken machen, wer da Zugriff hat, wo man das ablegt u.s.w..

Das wären so meine paar Cent. Aber ganz wichtig der Hinweis: Ich bin kein Security Experte. Ich bin auch nur ein dummer Backend Entwickler der bei sowas nach Mami dem Security Experten schreit (weil das halt nicht mein Job ist - ich kann etwas mitreden und so aber ich werde mir den Hut nicht aufziehen...)
 

Oneixee5

Top Contributor
Eine PKI ist vorhanden, die wollen sich aber nur mit SSL befassen. Mit Software-Zertifikaten wollen die nichts zu tun haben. Eine sehr lange Gültigkeit hatte ich auch vorgeschlagen, dass willan aber auch nicht.
 

KonradN

Super-Moderator
Mitarbeiter
Ok, das klingt dann so, dass ihr sowas evtl. mit möglichst einfachen Mitteln selbst aufbauen wollt.

Ich habe da jetzt noch einmal geschaut und ich meine, ich hatte damals easy-rsa verwendet. Das habe ich jetzt zumindest einmal in Zusammenhang mit OpenVPN gefunden:
OpenVPN/easy-rsa: easy-rsa - Simple shell based CA utility (github.com)

(Das ist also komplett unabhängig von OpenVPN. Das ist halt mal als Set von Scripts entstanden, für Leute, die einfach ein OpenVPN Server betreiben wollten und dann plötzlich Client Zertifikate dafür brauchten. Das ist also einfach eine Art minimale CA.)

Wenn ihr regelmäßig neue Versionen deployed, dann kann es eine sehr gute Sache sein, das zu nutzen.

Alternativen
Wichtig: schnell overkill! Die Idee bei easy-rsa ist halt, einfach per openssl die Zertifikate zu verwalten und dazu gibt es paar Scripte

Es gibt natürlich auch Alternativen. Windows Server kann eine CA stellen (Das ist dann einfach nachinstallierbar) und es gibt Tools wie
X - Certificate and Key management (hohnstaedt.de)

Oder man geht sogar noch einen ganzen Schritt weiter und baut dann eine richtige ca wie z.B. smallstep oder Boulder (das kommt von letsencrypt). Das macht Sinn, wenn man es richtig aufziehen möchte und dann hat man auch Schnittstellen z.B. für Certbot und so.

Aber das wäre dann sozusagen eine zweite PKI Infrastruktur und das ist nach bisherigem Verständnis nicht die Lösung alleine schon vom Aufwand her um sich da einzuarbeiten....


Daher mein Tipp: Einfach mal mit easyrsa spielen. Mit den Scripts kann man ja mal durchspielen:
  • ca initialisieren
  • Client Zertifikat ausstellen
  • Client Zertifikat erneuern
  • Client Zerttifikat widerrufen

Da bekommt man schnell einen Eindruck und kann abschätzen, ob der Einsatz Sinn machen könnte.

Das alles natürlich nur mit meinem oberflächigen Verständnis der Situation.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Datenbankverbindung zu MS Access Datenbankprogrammierung 4
Zrebna Wie mittels PL/SQL eine Datenbankverbindung blockieren? Datenbankprogrammierung 6
B Probleme mit Datenbankverbindung Datenbankprogrammierung 2
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
Danloc Informationen für Datenbankverbindung wo/wie speichern? Datenbankprogrammierung 11
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
I Datenbankverbindung Oracle DB klappt nicht - getConnection returned null Datenbankprogrammierung 8
M Datenbankverbindung mit JSP herstellen Datenbankprogrammierung 19
D Keine Datenbankverbindung Datenbankprogrammierung 4
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
B Datenbankverbindung herstellen Datenbankprogrammierung 6
R Datenbankverbindung kann nicht hergestellt werden Datenbankprogrammierung 8
I SELECT bei Datenbankverbindung Datenbankprogrammierung 6
E Zuverlässige Datenbankverbindung Datenbankprogrammierung 4
B SQLite Java Login + Datenbankverbindung Datenbankprogrammierung 4
M Datenbankverbindung Access Datenbankprogrammierung 3
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
Kenan89 Keine Datenbankverbindung möglich Datenbankprogrammierung 52
T Datenbankverbindung access funtioniert nicht Datenbankprogrammierung 21
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
M Datenbankverbindung zu langsam beim Insert? Datenbankprogrammierung 6
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
N Allg. Frage zur Datenbankverbindung Datenbankprogrammierung 2
C [MSSQL] Datenbankverbindung will nicht klappen... Datenbankprogrammierung 2
Hartigan Datenbankverbindung automatisch aktualisieren Datenbankprogrammierung 3
C MySQL Keine Datenbankverbindung Datenbankprogrammierung 6
D MySQL Datenbankverbindung scheitert Datenbankprogrammierung 9
A Datenbankverbindung mit einer Datenbank auf einem Webspace Datenbankprogrammierung 10
G Wie sieht eine Datenbankverbindung mit jndi aus? Datenbankprogrammierung 3
D Sicherheit für Datenbankverbindung Datenbankprogrammierung 19
MQue MySQL DatenbankVerbindung Datenbankprogrammierung 3
B Datenbankverbindung kann nicht aufgebaut werden. Datenbankprogrammierung 2
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
G Datenbankverbindung mit Proxool aufrecht erhalten Datenbankprogrammierung 4
G iBatis Datenbankverbindung - DB-User übergeben Datenbankprogrammierung 4
J Warum ist es aufwendig eine Datenbankverbindung herzustellen Datenbankprogrammierung 3
E Datenbankverbindung verwalten Datenbankprogrammierung 6
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E Datenbankverbindung Java MySQL Exception Datenbankprogrammierung 10
K Datenbankverbindung zu MySQL in XAMPP Datenbankprogrammierung 11
M Dauerhafte Datenbankverbindung - Timeouts? Datenbankprogrammierung 4
timomeinen [Hibernate] Datenbankverbindung testen Datenbankprogrammierung 11
M Datenbankverbindung bricht nach ca. 12 Stunden Verbindung ab Datenbankprogrammierung 3
K Wann schließt ihr die Datenbankverbindung? Datenbankprogrammierung 7
E Datenbankverbindung von BIRT Datenbankprogrammierung 3
S Datenbankverbindung auslagen Datenbankprogrammierung 3
8 MySQL Datenbankverbindung herstellen FAQ Datenbankprogrammierung 2
A Was passiert wenn eine Datenbankverbindung unterbricht Datenbankprogrammierung 7
T SSL Zertifikat für mysql datenbankzugriff Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben