
사용자 노트북을 변경하고 있는데 OpenVPN GUI에 사용자 이름과 비밀번호를 저장했습니다. 당연히 그들은 얼마 전에 비밀번호를 입력하고 "비밀번호 저장"을 클릭했기 때문에 자신의 비밀번호를 모릅니다. VPN 계정을 재설정하지 않고도 새 노트북으로 마이그레이션할 수 있도록 이러한 세부 정보를 복구할 수 있는 방법이 있습니까? (이렇게 하는 것이 훨씬 더 어렵습니다!)
두 노트북 모두 Windows 10입니다.
.ovpn
, p12
및 파일을 복사했지만 .key
GUI에는 여전히 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다. 구성 디렉터리(프로그램 파일 아래 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의 레지스트리 경로를 저장된 경로로 바꾸고 파워 셸 창에서 이 스크립트를 실행하세요... 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