恢復 OpenVPN 保存的密碼

恢復 OpenVPN 保存的密碼

我正在更換使用者筆記型電腦,他們已將使用者名稱和密碼保存在 OpenVPN GUI 中。他們自然不知道自己的密碼,因為他們不久前輸入過密碼,然後點擊「儲存密碼」。無論如何,有沒有辦法恢復這些詳細信息,以便我可以將它們遷移到新筆記型電腦,而不必重置 VPN 帳戶(這會比實際情況困難得多!)。

兩台筆記型電腦均運行 Windows 10。

我已經複製了.ovpnp12.key文件,但 GUI 仍然提示輸入使用者名稱和密碼。 config 目錄中沒有密碼文字檔案(在 Program Files 下的 OpenVPN 下)。

我也搜尋過註冊表,但找不到那裡的資訊。

編輯:需要明確的是,我實際上不需要「恢復」密碼。例如,如果它在註冊表項中加密,那就沒問題,我可以從舊筆記型電腦中匯出該金鑰並將其匯入到新筆記型電腦上。我需要找到一種方法將詳細資訊從laptop1複製到laptop2。

答案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

加入亞歷克斯的答案:

如果需要,您還可以透過新增以下兩行輕鬆提取使用者名稱:

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

另請注意,根據您的 PowerShell 配置,您可能需要先執行以下兩個命令,然後腳本才能運作(以允許腳本並啟用解密過程所需的安全性類型):

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

相關內容