恢复 OpenVPN 保存的密码

恢复 OpenVPN 保存的密码

我正在更换用户的笔记本电脑,他们已将用户名和密码保存在 OpenVPN GUI 中。他们当然不知道密码,因为他们不久前输入了密码并点击了“保存密码”。有没有办法恢复这些详细信息,以便我可以将它们迁移到新笔记本电脑,而无需重置 VPN 帐户(这比想象的要困难得多!)。

两台笔记本电脑均搭载 Windows 10。

我已将.ovpnp12.key文件复制过来,但 GUI 仍提示输入用户名和密码。配置目录中没有密码文本文件(Program Files 下的 OpenVPN 下)。

我也搜索了注册表,但在那里找不到信息。

编辑:要清楚,我实际上不需要“恢复”密码。例如,如果它是在注册表项中加密的,那就没问题,我可以从旧笔记本电脑中导出密钥并将其导入到新笔记本电脑中。我需要找到一种方法将详细信息从笔记本电脑 1 复制到笔记本电脑 2。

答案1

根据 OpenVPN GUI源代码,保存的密码存储在注册表中HKCU\Software\OpenVPN-GUI\configs

答案2

此链接中的 Powershell 脚本为我获取密码: OpenVPN 密码恢复

我的电脑上的注册表名称有点不同;我的版本:

$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))
}

您可能还需要Add-Type -AssemblyName System.Security在 Powershell 中执行才能使其正常工作。

编辑:在 Windows 10 上,OpenVPN v11.9,$encryptedbytes=$item.'key-data'

答案3

从使用企业 openVPN 配置的 Windows 10 迁移到 Windows 11 工作场所后,我遇到了同样的问题。此线程中的脚本对我没有帮助。我做了自己的脚本。也许这对其他人有帮助...只需将 Get-ItemPropertyValue 中的注册表路径替换为您存储的路径,然后在 power shell 窗口中运行此脚本...在 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))

答案4

添加Alex的答案:

如果需要,您还可以通过添加以下两行轻松提取用户名:

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

另请注意,根据您的 PowerShell 配置,您可能需要先运行以下两个命令,脚本才能运行(以允许脚本并启用解密过程所需的安全类型):

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

相关内容