通过注册表自动输入 Windows 10 上 802.1X 身份验证的用户凭据

通过注册表自动输入 Windows 10 上 802.1X 身份验证的用户凭据

我想要自动化 802.1X 环境中所需的配置设置。为此,我需要传递用户凭据。

因此,我想构建一个需要用户凭据的小型 GUI。单击登录按钮等按钮后,PowerShell 脚本将导入包含网络接口配置数据的 xml 文件。

此 XML 将通过以下方式导入:

netsh lan add profile filename="PATH_AND_FILENAME.xml" interface="INTERFACE_NAME"

完成后,我想将用户凭据(在 GUI 中提供)传递给操作系统,而不使用内置对话框。

我发现存储凭据的注册表项类似于User HKCU\Software\Microsoft\Wlansvc\UserData\Profiles[GUID]Machine HKLM\Software\Microsoft\Wlansvc\UserData\Profiles[GUID],但它们用于无线连接。

我必须将凭据保存在哪里才能缓存它们?Windows GUI 中有一个等效功能,如屏幕截图所示

802.1X 设置:

802.1X 设置

要保存的凭证:

要保存的凭证

答案1

试图窃取用户信用并不明智。它们不是纯文本形式,并且无法逆转地传递给任何其他操作。

您说您正在呈现一个 GUI 来向用户询问凭据。在任何交互式会话期间,如果您询问凭据,则需要以安全的方式询问。

完成此操作后,您可以直接通过代码获取用户名和密码。但是,您现在处理的是非常敏感的用户信息。您确实需要咨询您的安全/风险管理/政策团队是否同意这样做。这是因为您实际上是在捕获用户凭证,您可以在用户可以访问的任何地方使用这些凭证,而且没有什么可以阻止您以后带着它们逃跑。

因此,您可以简单地使用 Get-Credential 或创建一个新的 PSCredential 对象,或者使用 SecureString 来请求用户凭证,然后在需要它们时,只需反转它即可。

($Creds = Get-credential -Credential "$env:USERDOMAIN\$env:USERDOMAIN")

$Creds.GetNetworkCredential().UserName
$Creds.GetNetworkCredential().Password

# Results

UserName                             Password
--------                             --------
contoso\testuser System.Security.SecureString
testuser
password



($Username = Read-Host -Prompt 'Enter username')
($Password = Read-Host -Prompt 'Enter password' -AsSecureString)
($Creds = New-Object System.Management.Automation.PSCredential ($Username, $Password))

$Creds.GetNetworkCredential().UserName
$Creds.GetNetworkCredential().Password

# Results

Enter username: contoso\testuser
contoso\testuser
System.Security.SecureString

UserName                             Password
--------                             --------
contoso\testuser System.Security.SecureString
testuser
password


($Creds = New-Object PSCredential $Username, $Password)

$Creds.GetNetworkCredential().UserName
$Creds.GetNetworkCredential().Password


# Results

$Creds

UserName                             Password
--------                             --------
contoso\testuser System.Security.SecureString

UserName                             Password
--------                             --------
contoso\testuser System.Security.SecureString
testuser
password

OP 更新

至于……

将它们保存在哪里。我想知道应该将它们保存在哪里以缓存用户凭据

这些是您可以利用的方法。当然,这必须在需要它的任何其他用例之前完成。

无需提示即可对多个用户使用安全密码

#saving credentials
Get-Credential | Export-CliXml -Path c:\credential.xml

#importing credentials to a variable
$Credential = Import-CliXml -Path c:\credential.xml

关于此主题的 YouTube 视频: 了解如何使用 PowerShell 安全地使用密码

您还可以使用 Windows 凭据存储并从那里调用它。上面的视频中也有显示。

使用 Windows 凭据管理器

https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde

https://www.powershellgallery.com/packages/CredentialManager/1.0

https://www.experts-exchange.com/questions/29061982/Powershell-Using-credentials-stored-in-Credential-Manager.html

相关内容