PowerShell DSC凭据解密错误

时间:2017-04-14 14:18:48

标签: powershell dsc

我创建了一个Pull Server配置。 Pull Server(也用于编译MOF文件和客户端)都是Windows Server 2016,完全从Azure Image更新。

传递凭据时,我一直遇到错误。因此,当我运行Start-DSCConfiguration -Wait -Verbose时,我写了一个小的自定义DSC资源,显示密码为clear txt

您可以在此处找到它:https://gist.github.com/aboersch/65e846a4966fe2c4708ed21d655a54a7

客户端无法正确解密凭据。作为我收到的密码

-----BEGIN CMS-----
<Long Multi-Line Base64 String>
-----END CMS-----

如果我将此传递给Unprotect-CmsMessage,我会收到正确的密码。

证书传递$ .PrivateKey.KeyExchangeAlgorithm和$ .Verify

我尝试将证书提供程序更改为“Microsoft Enhanced Cryptographic Provider v1.0”,“Legacy Cryptographic Service Provider”和“Microsoft RSA SChannel Cryptographic Provider”。

我也尝试了xDSCUtils New-xSelfSignedDscEncryptionCertificate。

如果我使用相同的证书并在同一台服务器上编译和执行,则没有问题。

我已经尝试过这些: DSC problems with Credentials and build 10586 https://wespoint.wordpress.com/2017/01/19/powershell-dsc-encryption-issue/

以下是证书属性:

EnhancedKeyUsageList     : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {ComputerFQDN}
SendAsTrustedIssuer      : False
Archived                 : False
EnhancedKeyUsage         : Document Encryption (1.3.6.1.4.1.311.80.1)
FriendlyName             : 
IssuerName               : 
NotAfter                 : 4/14/2018 1:09:37 PM
NotBefore                : 4/14/2017 1:09:37 PM
HasPrivateKey            : True
PrivateKey               : 
PublicKey                : RSA (2048 bits)
RawData                  : 
SerialNumber             : 19000000115FCB3C2E4C71BA69000000000011
SubjectName              : 
SignatureAlgorithm       : sha256RSA
Thumbprint               : F4238E74BFB238DEE89C78C13B5C2C8182674801
Version                  : 3
Handle                   : 1362382910512
Issuer                   : CA
Subject                  : CN=ComputerFQDN

1 个答案:

答案 0 :(得分:0)

问题主要与部分配置有关,我相信它是Windows Server 2016上WMF 5.1中的一个真正的Bug。

基本上,如果您有部分配置(推送或拉动并不重要),其中一个配置功能不包含具有凭证的资源,从而强制使用MOF证书序列化凭证,解密将失败。

您可以在Windows Server 2016或Windows 10上使用WMF 5.1自行重现:

  1. 将名为DscTest的文件夹添加到C:\ Program Files \ WindowsPowerShell \ Modules,并将此gist中的文件添加到其中。

  2. 执行this脚本。前两个将通过,而最后一个将失败。

  3. 解决方法是包含一个资源(即使它是虚拟资源),它为每个部分配置函数使用Credential。这就是我的模块中的DscCredentialHole资源来自第一个要点。