Hallo Bert,
noch ein paar weitere unsortierte Gedanken:

- Vewenden die MySQL/MariaDB Libraries nicht auch
  Konfigurationsfiles (mehr oder weniger implizit), in denen man dann
  solche Dinge erledigen könnte?

- Möchte MariaDB nicht API-kompatibel zu MySQL sein?
  Exim behandelt aktuell beide Libraries gleich (bis auf etwas Magie zum
  ermitteln der aktuellen Version, da gab es wohl unterschiedliche
  Defines in den beiden Libs)

> An ssh -NL localhost:3306:localhost:3306 mittels pubkey auth hatte ich
> auch schon gedacht, aber ja das ist wieder manueller Aufwand und ein
> weiteres vermeidbares Scheunentor.

Na, als Scheunentor würde ich einen SSH-Tunnel jetzt nicht bezeichnen,
aber Aufwand, ja, das wäre es.

> > Vielleicht
> >         mysql_servers = <; [tls://]localhost[:port]/DB/User/Passwort
> 
> Das würde dann das Verhalten implizieren TLS zu erzwingen wenn tls://
> als Protokoll angegeben wurde und darauf bestehen verschlüsselt zu
> kommuizieren?

So war der Gedanke. Aber wie Du selbst weiter unten ausführst, wird es
schnell unübersichtlich, wenn man da noch weitere Optionen mit einbauen
möchte (CA, Client-Cert, Ciphers, …)

> Hier geht es dann weiter und man müsste mindestens prüfen ob das Server
> Zertifikat durch eine vertrauenswürdige CA ausgestellt wurde (und ggf.
> noch nicht revoked). Dafür brauchen wir:
> 
>   MYSQL_OPT_SSL_CA || MYSQL_OPT_SSL_CAPATH
>   MYSQL_OPT_SSL_CRL || MYSQL_OPT_SSL_CRLPATH
> 
> Worauf ich hinaus will: mit mysql_servers ist es bestimmt nicht getan.

Full Ack.

>   tls_mysql_servers // für den connection string
>   tls_mysql_servers_verify // default true, anderenfalls fallback
>     unencrypted

Na, aber z.B. kann man den MySQL-Server auch direkt beim Lookup mitgeben

        … = ${lookup mysql,servers=… {SELECT ...}}
und ich glaube, auch so:
        … = mysql,servers=…;SELECT ...

Es wäre also gut, wenn man alle erforderliche Information in *einen*
String bekäme.

        mysql_servers = host[:port]/db/user/password/tls=required,ca=…,

Dann gäbe es nur ein Problem, wenn das Passwort einen Slash enthält,
aber ich denke, das Problem haben wir jetzt schon (habe jetzt nicht in
den Sourcen nachgeschaut, ob wir das mit Quting oder Escaping umgehen
könnten.

Wenn also alle erforderliche Info in einem String steckt, könnten wir
das auch problemlos bei der expliziten Verwendung unterbringen. Wird
natürlich dann nicht mehr schön

        … = ${lookup 
mysql,servers=localhost/db/user/password/tls=required,ca=…{SELECT …}}

Aber wir haben ja Macros.

Zur Zertifikatsprüfung: Ich würde jetzt mal unterstellen, dass die MySQL
libs sich da mit irgendwelchen dazugenommen TLS libs auch selbst
kümmern, oder? Wenn man an die Verbindungsdetails dran kommt, könnte man
aber sicher auch Zertifikats-Prüfungs-Funktionen nutzen, die der Exim
schon bringt (wobei auch der m.W. sich dort auf GnuTLS bzw. OpenSSL
verlässt).


> Denke die Ausführungen erklären was ich meinte, es ging mir darum wie
> dreckig man sich die Finger machen müsste:)

Ich glaube, es wird nicht soo schlimm.

> > Wenn Du das selbst machen möchtest, gib Bescheid, ich unterstütze Dich
> > gerne dabei.
> 
> Zunächst habe ich mir mal darüber Gedanken gemacht, je nachdem wie
> komplex die Geschichte werden soll, würde ich mich daran beteiligen.

Es würde mich freuen. Pro-Tip: Wir können Leute gebrauchen, die sich
gerne an OpenSource beteiligen.

-- 
Heiko

Attachment: signature.asc
Description: PGP signature

Antwort per Email an