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