DKIM - Verhalten bei Eingabe eines inkorrekten private key

chris1

Member
heute hat ein Kunde einen nicht korrekten private key eingetragen, das Ergebnis daraus war wie folgt:
das private keyfile wird im filesystem geschrieben, nur kann ispconfig daraus den public key nicht generieren und schreibt
ein leeres file. Dann versucht ispconfig amavisd neu zu starten, dies wird durch den inkorrekten private key aber verhindert.
Daraus resultiert, dass kein anderer Kunde einen private key verwenden kann, weil amavisd aufgrund des einen fehlerhaften private key sich nicht neustarten lässt.

Ich habe das dkim plugin nun dahingehend verändert, dass erst wenn auch der public key geschrieben werden konnte ein success=true zurückgegeben wird. Dadurch kommt ispconfig garnicht in Versuchung die amavis config zu ändern und amavis neu zu starten.
Zusätzlich habe ich noch eine Zeile eingefügt, die im Fehlerfall public und private key wieder aus dem Filesystem löscht.

Optimal wäre natürlich noch wenn man im Fehlerfall in der Datenbank den private key löscht und DKIM deaktiviert, da habe ich aber leider zu wenig Ahnung wie ispconfig das handelt.

Geänderte Datei anbei
 

Anhänge

florian030

Active Member
Wie sieht denn der falsche private-key aus? Wenn Du den im Interface eingibst, wird der in der function check_private_key aus interface/lib/classes/validate_dkim.inc.php überprüft.
Beim Server-Plugin anzusetzen ist daher eigentlich zu spät.
 

chris1

Member
achso da gibts eine Prüfung!? so genau bin ich mit der Funktionsweise nicht vertraut.
In meinem Falls wars einfach ein fehlender Zeilenumbruch der zum Problem führte:
zb:
----BEGIN CERTIFICATE-----MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
 

florian030

Active Member
Wenn das das komplette Beispiel war, sollte es einen Fehler geben. Zum Validieren eines private-keys ist das eigentlich nur
echo $key |openssl rsa -check
 

chris1

Member
hab mir das nochmal genau angesehen, "exec" war bei mir fürs interface deaktiviert, lustig dass das bisher nicht aufgefallen ist.
exec('echo '.escapeshellarg($field_value).'|openssl rsa -check', $output, $result);

$output und $result liefern daher NULL zurück
und dann greift die if Abfrage nicht und der Salat ist perfekt.
if($result != 0) return $this->get_error($validator['errmsg']);


exec ist nicht oft in Verwendung im frontend, deswegen wirds vermutlich nicht aufgefallen sein.
meine Änderungen an der mail_plugin_dkim.inc werden dann vermutlich obsolet, obwohl der genauere check trotzdem nicht schaden kann sag ich mal, aber die Priorität kann man sicher zurückstufen ;)
 

Werbung

Top