Gespeichertes OpenVPN-Passwort wiederherstellen

Gespeichertes OpenVPN-Passwort wiederherstellen

Ich wechsele den Laptop eines Benutzers und dieser hat seinen Benutzernamen und sein Passwort in der OpenVPN-Benutzeroberfläche gespeichert. Natürlich kennt er sein Passwort nicht, da er es vor einiger Zeit eingegeben und auf „Passwort speichern“ geklickt hat. Gibt es eine Möglichkeit, diese Daten wiederherzustellen, sodass ich sie auf den neuen Laptop übertragen kann, ohne das VPN-Konto zurücksetzen zu müssen (was viel schwieriger wäre, als es sein sollte!).

Beide Laptops sind mit Windows 10 ausgestattet.

Ich habe die Dateien und kopiert .ovpn, aber die GUI fordert immer noch zur Eingabe von Benutzername und Passwort auf. Im Konfigurationsverzeichnis (unter OpenVPN unter „Programme“) befindet sich keine Passwort-Textdatei.p12.key

Ich habe auch die Registrierung durchsucht, konnte die Informationen dort aber nicht finden.

BEARBEITEN: Um das klarzustellen: Ich muss das Passwort nicht wirklich „wiederherstellen“. Wenn es beispielsweise in einem Registrierungsschlüssel verschlüsselt ist, ist das in Ordnung. Ich könnte den Schlüssel vom alten Laptop exportieren und auf dem neuen importieren. Ich muss einen Weg finden, die Details von Laptop1 auf Laptop2 zu kopieren.

Antwort1

Über die OpenVPN-GUIQuellcode, gespeicherte Passwörter werden in der Registry unter gespeichert HKCU\Software\OpenVPN-GUI\configs.

Antwort2

Das Powershell-Skript unter diesem Link ruft das Passwort für mich ab: OpenVPN-Passwortwiederherstellung

Die Registrierungsnamen auf meinem Computer sind etwas anders; meine Version:

$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}

foreach ($item in $items)
{
  $encryptedbytes=$item.'auth-data'
  $entropy=$item.'entropy'
  $entropy=$entropy[0..(($entropy.Length)-2)]

  $decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
    $encryptedBytes, 
    $entropy, 
    [System.Security.Cryptography.DataProtectionScope]::CurrentUser)
 
  Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}

Möglicherweise müssen Sie es auch in Powershell ausführen, Add-Type -AssemblyName System.Securitydamit es funktioniert.

bearbeiten: unter Windows 10, OpenVPN v11.9,$encryptedbytes=$item.'key-data'

Antwort3

Ich habe dasselbe Problem nach der Migration von Windows 10 mit der OpenVPN-Konfiguration des Unternehmens auf den Arbeitsplatz unter Windows 11. Die Skripte in diesem Thread haben mir nicht geholfen. Und ich habe meine eigenen erstellt. Vielleicht hilft das jemand anderem ... Ersetzen Sie einfach den Registrierungspfad in Get-ItemPropertyValue durch Ihren gespeicherten Pfad und führen Sie dieses Skript im Power Shell-Fenster aus ... Funktioniert unter Windows 10x64, OpenVPN 2.4.9

$keyBinEncrupted = Get-ItemPropertyValue 'HKCU:\SOFTWARE\OpenVPN-GUI\configs\corpnet' 'key-data'
$entropyBin = Get-ItemPropertyValue 'HKCU:\SOFTWARE\OpenVPN-GUI\configs\corpnet' 'entropy'
$entropyBin = $entropyBin[0..(($entropyBin.Length)-2)]

$keyBinDecrupted = [System.Security.Cryptography.ProtectedData]::Unprotect(
    $keyBinEncrupted,
    $entropyBin,
    [System.Security.Cryptography.DataProtectionScope]::CurrentUser)

Write-Host ([System.Text.Encoding]::Unicode.GetString($keyBinDecrupted))

Antwort4

Ergänzung zur Antwort von Alex:

Sie können den Benutzernamen bei Bedarf auch ganz einfach extrahieren, indem Sie die folgenden beiden Zeilen hinzufügen:

$username=$encryptedbytes=$item.'username'
Write-Host ([System.Text.Encoding]::Unicode.GetString($username))

Beachten Sie auch, dass Sie abhängig von Ihrer PowerShell-Konfiguration möglicherweise zuerst die folgenden beiden Befehle ausführen müssen, bevor das Skript funktionieren kann (um Skripte zuzulassen und die für den Entschlüsselungsprozess erforderlichen Sicherheitstypen zu aktivieren):

set-executionpolicy remotesigned 
Add-Type -AssemblyName System.Security

verwandte Informationen