
Я меняю ноутбук пользователя, и он сохранил свое имя пользователя и пароль в OpenVPN GUI. Естественно, они не знают свой пароль, потому что они ввели его некоторое время назад и нажали «сохранить пароль». Есть ли способ восстановить эти данные, чтобы я мог перенести их на новый ноутбук без необходимости сбрасывать учетную запись VPN (что было бы гораздо сложнее, чем должно быть!).
Оба ноутбука работают на Windows 10.
Я скопировал файлы .ovpn
, p12
и .key
, но GUI все еще запрашивает имя пользователя и пароль. Текстового файла пароля внутри каталога config (в OpenVPN в Program Files) нет.
Я тоже искал в реестре, но не смог найти там эту информацию.
РЕДАКТИРОВАТЬ: Чтобы было ясно, мне на самом деле не нужно "восстанавливать" пароль. Если он зашифрован в ключе реестра, например, это нормально, я мог бы экспортировать ключ со старого ноутбука и импортировать его на новый. Мне нужно найти способ скопировать данные с laptop1 на laptop2.
решение1
Согласно графическому интерфейсу OpenVPNисходный код, сохраненные пароли хранятся в реестре в разделе 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
У меня та же проблема после миграции с Windows 10 с корпоративной конфигурацией OpenVPN на Windows 11 на рабочем месте. Скрипты в этой теме мне не помогли. И я сделал свой собственный. Может быть, это поможет кому-то еще... Просто замените путь реестра в Get-ItemPropertyValue на ваш сохраненный путь и запустите этот скрипт в окне PowerShell... Работает в 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