从Powershell

时间:2018-07-08 20:50:55

标签: powershell powershell-v3.0 machine.config

是否可以从Powershell脚本中读取Machine.config中的加密连接字符串?

由于安全原因,我们试图将硬编码的连接字符串从PowerShell脚本移至Machine.config

更新:Powershell脚本应该从Machine.config中读取连接字符串(通过aspnet_regiis加密)并连接到数据库。

1 个答案:

答案 0 :(得分:0)

我不确定PowerShell在哪里提出您的问题。如果您使用诸如aspnet_regiis.exe之类的内置命令来加密配置节,则您的IIS站点将不会意识到该节已加密。

我不确定将某些内容放入machine.config中将如何使应用程序更安全,因为任何透明地读取该内容的内容都将对该计算机上的任何应用程序起作用。

.net配置的工作方式是您拥有some.exe,并且它具有some.exe.config文件。部署some.exe时,您可以(应该?)包括加密敏感部分的步骤。该应用程序仍然会读取数据,而不会意识到它已被加密。

但同样是应用程序,而不是Powershell,它正在读取加密的值。

这是我使用的脚本的一部分,用于加密/解密部分。请谨慎使用,因为加密的数据只能在同一台计算机(可能是同一操作系统)上解密。 YMMV

$appConfig = "your.exe"
$sectionName = "appSettings"
$dataProtectionProvider = "DataProtectionConfigurationProvider"

if (-not (Test-Path $path) ) { throw "Unable to find $($appConfig) $($path)" }

$configuration = [System.Configuration.ConfigurationManager]::OpenExeConfiguration($path)
$section = $configuration.GetSection($sectionName)
if (-not $section.SectionInformation.IsProtected) {
    $section.SectionInformation.ProtectSection($dataProtectionProvider)
    $section.SectionInformation.ForceSave = $true
    $configuration.Save([System.Configuration.ConfigurationSaveMode]::Full)
    Write-Information -Message "$($sectionName) in $($appConfig) has been protected from casual users"
}
else {
    Write-Information -Message "$($sectionName) in $($appConfig) is already protected"
    $section.SectionInformation.UnprotectSection()
    $section.SectionInformation.ForceSave = $true
    $configuration.Save([System.Configuration.ConfigurationSaveMode]::Full)
    Write-Information -Message "$($sectionName) in $($appConfig) protection removed"
}

这是用于加密/解密配置节的完整脚本的片段。