
ユーザーのラップトップを変更するのですが、OpenVPN GUI にユーザー名とパスワードが保存されています。しばらく前にパスワードを入力して「パスワードを保存」をクリックしたので、当然パスワードはわかりません。VPN アカウントをリセットせずに (リセットすると、本来よりもかなり困難になります!)、これらの詳細を回復して新しいラップトップに移行する方法はありますか。
どちらのラップトップも Windows 10 です。
.ovpn
、p12
およびファイルをコピーしました.key
が、GUI でユーザー名とパスワードの入力が求められます。config ディレクトリ (OpenVPN の Program Files の下) 内にはパスワード テキスト ファイルがありません。
レジストリも検索しましたが、情報は見つかりませんでした。
編集: 明確に言うと、実際にパスワードを「回復」する必要はありません。たとえば、レジストリ キーで暗号化されている場合は問題ありません。古いラップトップからキーをエクスポートして、新しいラップトップにインポートできます。詳細をラップトップ 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 からの回答に付け加えると:
必要に応じて、次の 2 行を追加することで、ユーザー名も簡単に抽出できます。
$username=$encryptedbytes=$item.'username'
Write-Host ([System.Text.Encoding]::Unicode.GetString($username))
また、PowerShell の設定によっては、スクリプトが機能する前に、まず次の 2 つのコマンドを実行する必要があることに注意してください (スクリプトを許可し、復号化プロセスに必要なセキュリティ タイプを有効にするため)。
set-executionpolicy remotesigned
Add-Type -AssemblyName System.Security