Powershell DSC 使用错误的证书文件进行节点名称部分匹配的加密?

Powershell DSC 使用错误的证书文件进行节点名称部分匹配的加密?

我认为 DSC 选择用于凭证加密的证书文件的方式存在错误,例如服务资源和 PSCredential。

如果节点名称包含在后续节点名称中(节点顺序很重要),则 DSC 配置会使用来自 AllNodes 集合的错误证书文件。这意味着发送到节点的加密值可能是错误的。

以下是包含两个测试的重现。两个测试都应该失败,但第一个测试成功(使用错误的证书):

$password = ConvertTo-SecureString "password" -AsPlainText -Force
$serviceCredential = New-Object System.Management.Automation.PSCredential ("username", $password)
$currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition

$thisShouldNotWork = @{
    AllNodes = @(
        @{
            NodeName = "web1"
            CertificateFile = "nonexistentfile"
        },

       @{
            NodeName = "customerweb1"
            CertificateFile = "$currentPath\mycert.cer"
        }
    );
}

$thisDoesNotWork = @{
    AllNodes = @(
        @{
            NodeName = "web1"
            CertificateFile = "nonexistentfile"
        },

       @{
            NodeName = "customerweXb1"
            CertificateFile = "$currentPath\mycert.cer"
        }
    );
}

Configuration DscWebServer
{
  Node $AllNodes.NodeName
  {
    Service "Service Started"
    {
      Name = "MyService"
      State = "Running"
      Credential = $serviceCredential
    }
  }
}

Write-Host "Test 1" -ForegroundColor Blue -BackgroundColor White
DscWebServer -OutputPath .\DSC -ConfigurationData $thisShouldNotWork
Write-Host "Test 2" -ForegroundColor Blue -BackgroundColor White
DscWebServer -OutputPath .\DSC -ConfigurationData $thisDoesNotWork

我已经报告了此事连接但我想在这里提出这个问题,以防它有帮助,或者我所做的事情有什么不寻常的地方。有人能解释这种行为吗?

更新:微软确认这是一个错误,并于 2015 年 5 月修复了它。我收到了这样的反馈:“这个问题已经在 WMF5 四月预览版中修复了。如果您有不同意见,请告诉我们 :)”

答案1

这很有趣。您能确认每个测试的输出是什么吗?测试 2 实际上会引发异常吗?

我不会说你所做的事情有什么不寻常的,因为 DSC 就是为以这种方式处理多个节点而设计的,但仍然只有少数人使用 DSC,而使用安全凭证的人就更少了。

此外,我认为我们很多人一直对每个节点使用单一配置,这可以防止出现这种行为。

这当然对您来说也是一个可行的解决方法,但需要改变您的工作流程。

要使用现有的配置数据,您可以像这样解决该问题:

foreach($node in $thisShouldNotWork.AllNodes) {
    DscWebServer -OutputPath .\DSC -ConfigurationData @{AllNodes = @($node)}
}

如果可能的话,我将在明天尝试重现此问题,以便我可以将我的投票和重现描述添加到连接报告中。

相关内容