Erstellt vor 6 Jahren

Geschlossen vor 6 Jahren

Zuletzt geändert vor 4 Jahren

#1578 closed defect (fixed)

Bug using CRL in OpenVPN

Erstellt von: KingTutt Verantwortlicher: oliver
Priorität: normal Meilenstein: freetz-2.0
Komponente: packages Version: devel
Stichworte: Beobachter: MaxMuster
Product Id: 7141 Firmware Version: 40.04.87freetz-devel-7906

Beschreibung (zuletzt geändert von cuma)

FRITZBox Fon WLAN 7141 Firmware-Version 40.04.87freetz-devel-7906 (Alien)

Beschreibung:
Möchte man für das Paket OpenVPN eine CRL benutzen stürzt der VPN Daemon beim connect eines Client mit folgender Meldung ab:

Oct 27 13:16:47 fritz daemon.notice openvpn[7564]: XX.XXX.XX.XXX:40451 Exiting
Oct 27 13:16:47 fritz daemon.notice openvpn[7564]: XX.XXX.XX.XXX:40451 Closing TUN/TAP interface
Oct 27 13:16:47 fritz daemon.notice openvpn[7564]: XX.XXX.XX.XXX:40451 /sbin/ifconfig tap0 0.0.0.0
Oct 27 13:16:47 fritz daemon.warn openvpn[7564]: XX.XXX.XX.XXX:40451 Linux ip addr del failed: could not execute external program

Die Lösung ist hier zu finden:
http://www.openvpn.net/index.php/open-source/documentation/howto.html#examples

"If you are using the chroot directive, make sure to put a copy of the CRL file in the chroot directory, since unlike most other files which OpenVPN reads, the CRL file will be read after the chroot call is executed, not before."

Nachdem der openvpn server gestartet ist, läuft er in der chroot Umgebung /tmp/openvpn/ und dort gibt es den Pfad der CRL /tmp/flash/openvpn/crl.pem (wie in der openvpn config spezifiziert ist) nicht.

Ein manuelles erstellen des Pfades /tmp/openvpn/tmp/flash/openvpn/ und das Kopieren der crl.pem von /tmp/flash/openvpn/ dorthin löst das Problem. Allerdings überlebt die Verzeichnisstruktur keinen Reebot der FritzBox. Wichtig ist auch die Maske 644 von crl.pem

"The CRL file is not secret, and should be made world-readable so that the OpenVPN daemon can read it after root privileges have been dropped."

Es müsste daher sichergestellt sein, dass die crl.pem bei einer Neueingabe z.B. über Web IF ins chroot kopiert wird, ebenso bei einem Reboot der FritzBox. Welchen Pfad man letztendlich wählt ist egal, Hauptsache er stimmt mit der Server config überein.

Im Gegenzug sollte die Datei /tmp/flash/openvpn/box.key die Maske 600 bekommen, sonst hat man ständig die Warnung ('/tmp/flash/openvpn/box.key' is group or others accessible') des Servers im Syslog. (Könnte man evtl. beim Erstellen der Datei gleich setzten)

Bei Erfolg erhält man folgende Syslog Ausgabe:

Oct 28 09:34:20 fritz daemon.notice openvpn[2119]: Testuser/XXX.XXX.XXX.XXX:9896 CRL CHECK OK: blablabla

Aufgefallen ist mir noch folgendes, evtl. sollte dafür ein eigenes Ticket aufgemacht werden:

Bei Verwendung des Paketes OpenVPN in Kombination mit dem Paket Dnsmask, bräuchte man einen Mechanismus, um die "Domain" zu synchronisieren. Setzt man unter Dnsmask eine neue Domain, müsste IMHO diese im chroot des OpenVPN server unter /tmp/openvpn/etc/resolv.conf auch geändert werden. Diese enthält sonst noch die ursprüngliche Domain der FritzBox z.B. fonwlan.box.

Anhänge (4)

openvpn_fix_crl.patch (945 Byte) - hinzugefügt von MaxMuster vor 6 Jahren.
Patch: Kopiere CRL in chroot-Verzeichnis /etc/
openvpn_fix_boxkey_accessmode.patch (1.8 KB) - hinzugefügt von MaxMuster vor 6 Jahren.
"chmod 600" for box.key
openvpn_fix_boxkey_accessmode.2.patch (846 Byte) - hinzugefügt von MaxMuster vor 6 Jahren.
"chmod 600" for box.key ; kürzere Version
0001-openvpn-Check-for-TUN-type-and-subnet-certs-auth-typ.patch (1.1 KB) - hinzugefügt von dileks vor 6 Jahren.
[PATCH] openvpn: Check for TUN type and subnet (certs auth-type & DHCP)

Alle Anhänge herunterladen als: .zip

Änderungshistorie (24)

comment:1 Geändert vor 6 Jahren durch dileks

WTF CRL? From [1]:
"If a private key is compromised, it can be disabled by adding its certificate to a CRL (certificate revocation list). The CRL allows compromised certificates to be selectively rejected without requiring that the entire PKI be rebuilt."

[1] http://openvpn.net/index.php/open-source/documentation/howto.html#pki

comment:2 Geändert vor 6 Jahren durch KingTutt

Bei den meisten Linux-Distros ist das Tool "TinyCA" im Repository dabei, womit man nicht nur eine CA und Client/Server Zertifikate erstellen kann, sondern eben auch eine CRL exportieren kann. Für manche Zwecke allerdins noch sehr "tiny".

http://tinyca.sm-zone.net/

Für Windows gibt es die Paketsammlung "Gpg4win" welche "Kleopatra", den Zertifikatsmanager für OpenPGP und X.509 enthält.

http://www.gpg4win.de/

comment:3 Geändert vor 6 Jahren durch oliver

  • Beobachter MaxMuster hinzugefügt

comment:4 Geändert vor 6 Jahren durch KingTutt

Die o.g. Fehlermeldung des OpenVPN Server im Bugeintrag oben ist leider unvollständig, daher hier noch einmal _mit_ der Ursache (cannot read: /tmp/flash/openvpn/crl.pem):

Oct 27 13:16:47 fritz daemon.err openvpn[7564]: XX.XXX.XX.XXX:40451 CRL: cannot read: /tmp/flash/openvpn/crl.pem: No such file or directory (errno=2)

Oct 27 13:16:47 fritz daemon.notice openvpn[7564]: XX.XXX.XX.XXX:40451 Exiting
Oct 27 13:16:47 fritz daemon.notice openvpn[7564]: XX.XXX.XX.XXX:40451 Closing TUN/TAP interface

Oct 27 13:16:47 fritz daemon.notice openvpn[7564]: XX.XXX.XX.XXX:40451 /sbin/ifconfig tap0 0.0.0.0

Oct 27 13:16:47 fritz daemon.warn openvpn[7564]: XX.XXX.XX.XXX:40451 Linux ip addr del failed: could not execute external program
Zuletzt geändert vor 6 Jahren von cuma (vorher) (Diff)

comment:5 Geändert vor 6 Jahren durch MaxMuster

Schaue ich mir mal an. Es sollte möglich/ausreichend sein, die Datei "unter" dem chroot-Verzeichnis zu haben, also im Zweifelsfall so wie die "/etc"-Dateien behandeln.

comment:6 Geändert vor 6 Jahren durch cuma

  • Beschreibung geändert (Diff)

Geändert vor 6 Jahren durch MaxMuster

Patch: Kopiere CRL in chroot-Verzeichnis /etc/

comment:7 Geändert vor 6 Jahren durch MaxMuster

Könnte das bitte mal jemand mit einer CRL testen??

comment:8 Geändert vor 6 Jahren durch KingTutt

Der Patch von MaxMuster funktioniert prima und beseitigt den Fehler

Oct 27 13:16:47 fritz daemon.err openvpn[7564]: XX.XXX.XX.XXX:40451 CRL: cannot read: /tmp/flash/openvpn/crl.pem: No such file or directory (errno=2)

Eben mit einer CRL getestet:

Nov  2 18:28:45 fritz daemon.notice openvpn[1143]: XX.XXX.XX.XXX:61000 CRL CHECK OK:

Auch das Löschen einer vorhandenen CRL funktioniert (Rückrichtung).

Die Warnung ('/tmp/flash/openvpn/box.key' is group or others accessible') bleibt auf Grund der Maske 644 noch bestehen, die CRL funktioniert aber trotzdem. Evtl. kann ein weiterer Patch die Maske der Datei per default auf 600 setzen.

Frage: Sollte für die oben beschriebene Abhängigkeit zwischen Dnsmask und OpenVPN bzgl. des Domainnamen in der resolf.conf ein weiteres Ticket erstellt werden?

Geändert vor 6 Jahren durch MaxMuster

"chmod 600" for box.key

Geändert vor 6 Jahren durch MaxMuster

"chmod 600" for box.key ; kürzere Version

comment:9 Geändert vor 6 Jahren durch KingTutt

Der zweite Patch behebt die Warnung

'/tmp/flash/openvpn/box.key' is group or others accessible'

des OpenVPN daemon im Syslog. Als Test habe ich die Maske der Datei box.key manuell auf 644 gesetzt und ein Firmwareupdate mit dem Patch aufgespielt. Nach dem Reboot der FritzBox waren die Rechte wieder korrekt auf 600 gesetzt.

Eine andere Warnung des daemon (von mir bislang nicht bemerkt) ist ein fehlendes gateway in der route option:

Nov  7 14:13:12 fritz daemon.notice openvpn[1148]: OpenVPN 2.2.1 mipsel-linux [SSL] [LZO2] [MH] [IPv6 payload 20110424-2 (2.2RC2)] built on Nov  7 2011
Nov  7 14:13:12 fritz daemon.warn openvpn[1148]: NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Nov  7 14:13:13 fritz daemon.notice openvpn[1148]: Diffie-Hellman initialized with 1024 bit key
Nov  7 14:13:13 fritz daemon.notice openvpn[1148]: TLS-Auth MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ]
Nov  7 14:13:13 fritz daemon.notice openvpn[1148]: Socket Buffers: R=[110592->131072] S=[110592->131072]
Nov  7 14:13:13 fritz daemon.warn openvpn[1148]: OpenVPN ROUTE: OpenVPN needs a gateway parameter for a --route option and no default was specified by either --route-gateway or --ifconfig options
Nov  7 14:13:13 fritz daemon.warn openvpn[1148]: OpenVPN ROUTE: failed to parse/resolve route for host/network: 10.0.0.0
Nov  7 14:13:13 fritz daemon.notice openvpn[1148]: TUN/TAP device tap0 opened

Das Gateway wird zwar den Clients korrekt gepusht, der Server selbst erhält die Info aber nicht.

comment:10 Geändert vor 6 Jahren durch MaxMuster

Bei welcher Config passiert das? Es gibt so viele Möglichkeiten, dass du da schon etwas konkreter sein müsstest…

EDIT: Ach, sehe gerade, dass das im Forum "ausführlicher" gepostet ist…

Zuletzt geändert vor 6 Jahren von MaxMuster (vorher) (Diff)

comment:11 Geändert vor 6 Jahren durch KingTutt

Ich habe gerade auf die letzte Trunk Version 7981 aktualisiert und die Patches erneut getestet. Soweit scheinen sie zu funktionieren.

1) Patch openvpn_fix_crl.patch​

2) Patch openvpn_fix_boxkey_accessmode.2.patch

3) Zeile 130 von openvpn_conf muss wie im Forum OpenVPN Thread (Posting 875) von Max beschrieben geändert werden

- echo "route ${DHCP_RANGE%.* *}.0 255.255.255.0" >> $CONFFILE

+ [ "$TYPE" = "tun" ] && [ ! $TUNSUBNET ] && echo "route ${DHCP_RANGE%.* *}.0 255.255.255.0" >> $CONFFILE

Mit diesem drei Änderungen könnte das Ticket nach meiner Einschätzung mit "fixed" geschlossen werden.

comment:12 Geändert vor 6 Jahren durch oliver

Ist das hier schon im SVN? Falls nicht würde bitte jemand einen Patch gegen den Trunk machen? Danke.

Geändert vor 6 Jahren durch dileks

[PATCH] openvpn: Check for TUN type and subnet (certs auth-type & DHCP)

comment:13 Geändert vor 6 Jahren durch MaxMuster

… und die beiden obrigen Patches (openvpn_fix_crl.patch​ und openvpn_fix_boxkey_accessmode.2.patch) passen noch zum aktuellen Trunk…

comment:14 Geändert vor 6 Jahren durch cuma

in openvpn_fix_boxkey_accessmode.2.patch würde ich aber die Reihenfolge tauschen:

modsave flash; chmod 600 ${CONFIG_FILE}; 

comment:15 Geändert vor 6 Jahren durch MaxMuster

Die Reihenfolge ist eigentlich "Banane", denn es geht um das dynamisch erzeugte Config-File für das Programm (/mod/etc/openvpn.conf), bei dem Openvpn "meckert", wenn es "riskante" Berechtigungen hat…

Zuletzt geändert vor 6 Jahren von MaxMuster (vorher) (Diff)

comment:16 Geändert vor 6 Jahren durch cuma

Ok, wenn die Datei nicht im Flash liegt ists Wurschd

comment:17 Geändert vor 6 Jahren durch oliver

  • Lösung auf fixed gesetzt
  • Status von new nach closed geändert
  • Verantwortlicher auf oliver gesetzt

In [8419]:

openvpn: Fix CRLs (by MaxMuster)

comment:18 Geändert vor 6 Jahren durch MaxMuster

Der erste Patch (openvpn_fix_crl.patch, der "crl.pem" nach /tmp/openvpn/etc kopiert) fehlt noch, oder ?!?

comment:19 Geändert vor 6 Jahren durch oliver

In [8421]:

openvpn: Fix CRLs (by MaxMuster)

  • refs #1578
  • missed one patch

comment:20 Geändert vor 4 Jahren durch cuma

  • Meilenstein von freetz-1.3 nach freetz-2.0 geändert
Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.