OpenVPN-Zertifikat ODER Plugin-Auth-Pam-Authentifizierung

7

Beim Konfigurieren des OpenVPN-Servers kann ich entweder die zertifikatbasierte Authentifizierung oder die Authentifizierung mit Benutzername / Kennwort mithilfe des openvpn-plugin-auth-pamPlugins aktivieren , jedoch nicht beide gleichzeitig.

Ich aktiviere die Authentifizierung mit Benutzername / Passwort wie folgt:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
client-cert-not-required
username-as-common-name

Sobald ich jedoch die folgenden Zeilen hinzufüge, funktionieren meine für die Zertifikatauthentifizierung konfigurierten Clients nicht mehr mit den folgenden Meldungen im Protokoll:

TLS Error: Auth Username/Password was not provided by peer        
TLS Error: TLS handshake failed                                   

Gibt es eine Möglichkeit, von Benutzern, die die Zertifikatauthentifizierung verwenden, keinen Benutzernamen / kein Kennwort zu verlangen?

Andrei Tanas
quelle
Wenn Sie beide (cert und pam) konfigurieren, werden meines Wissens beide angefordert. Ein Client-Zertifikat und die Authentifizierung per Pam. Openvpn bietet also keine Logik, um darauf zu reagieren, ob ein Client-Zertifikat vorgelegt wurde oder nicht.
Cornelinux
Ich hatte gerade das gleiche Problem. Ich sehe keinen Weg, dies zu tun. Je mehr ich mich damit beschäftigte, desto besser war es für mich, zwei Instanzen auf derselben Box auszuführen. Am
Philip
Am Ende habe ich auch zwei Instanzen ausgeführt.
Andrei Tanas

Antworten:

1

OpenVPN unterstützt nicht mehrere gleichzeitige Authentifizierungsmethoden. Die beste Lösung hierfür besteht, wie in den Kommentaren erwähnt, darin, zwei Instanzen von OpenVPN auszuführen. Es ist komplizierter, es auf derselben Box auszuführen, ist aber definitiv machbar.

Es scheint jedoch einige Problemumgehungen zu geben, die für Ihre Situation geeignet sein könnten.

Wenn Sie wissen, für welche Zertifikate ein Kennwort erforderlich ist und für welche nicht, lautet die Antwort Ja. Verwenden Sie ein 'auth-user-pass-verify'-Skript auf der Serverseite, um zuerst den Zertifikat-DN zu überprüfen (wenn Sie auch --username-as-common-name festlegen, kennen Sie den allgemeinen Namen des Zertifikats im Überprüfungsskript automatisch ). Wenn es sich um ein Zertifikat handelt, für das Sie wissen, dass ein Passwort eingegeben wurde, überprüfen Sie den Benutzernamen / das Passwort mit pam. Wenn Sie wissen, dass das Zertifikat kein Kennwort enthält, muss das Skript '0' zurückgeben, um den Zugriff zu ermöglichen.

Beachten Sie, dass es keine Möglichkeit gibt, automatisch zu bestimmen, ob der Benutzer ein Zertifikatkennwort eingegeben hat oder nicht - dies liegt außerhalb des openssl-Handshakes und ist dem OpenVPN-Server daher nicht bekannt.

Quelle: https://openvpn.net/archive/openvpn-users/2007-12/msg00179.html

Möglicherweise können Sie Ihre von OpenVPN generierten Schlüsselpaare auch in einen lokalen LDAP-Server einbinden und das oben genannte Skript zur Authentifizierung gegen LDAP mit dem bereitgestellten Zertifikat verwenden oder die angegebenen Anmeldeinformationen verwenden, sofern kein Zertifikat vorgelegt wurde.

Aaron St. Clair
quelle