加密证书必须包含数据加密或密钥加密

时间:2016-02-26 18:43:40

标签: powershell certificate x509certificate dsc

升级到Windows Management Framework 5.0后,我在采购DSC配置时开始收到以下异常。

ConvertTo-MOFInstance : System.ArgumentException error processing property 'Password' OF TYPE 'MSFT_Credential': Certificate
'---HIDDEN-CERTIFICATE-THUMPRINT-VALUE---' cannot be used for encryption. Encryption certificates must contain the Data Encipherment or Key
Encipherment key usage, and include the Document Encryption Enhanced Key Usage (1.3.6.1.4.1.311.80.1).
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:303 char:13
+             ConvertTo-MOFInstance MSFT_Credential $newValue
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Write-Error], InvalidOperationException

每个节点上使用的证书是使用以下证书请求生成的自签名证书。

[NewRequest]
Subject = CN=[computer-name-here].dsc
KeyLength = 2048
MachineKeySet = true
RequestType = Cert
KeySpec = AT_KEYEXCHANGE

然后将此请求文件提供给certreq命令行实用程序以生成证书并将其加载到cert:\LocalMachine\My证书库中。

我已尝试根据documentation for the certreq tool将以下内容添加到我的证书申请文件中,但我仍然遇到同样的失败。

KeyUsage = 0x30
[Strings]
szOID_ENHANCED_KEY_USAGE = "1.3.6.1.4.1.311.80.1"

KeyUsage设置为0x30可启用密钥加密和数据加密。但是,我似乎无法在生成的证书中找到有关增强密钥用法的详细信息。也许我在请求中错误地设置了这个值。

请帮忙。

2 个答案:

答案 0 :(得分:4)

您也可以使用New-SelfSignedCertificate cmdlet生成自签名证书。我写了这个模块,它将帮助生成DSC https://github.com/nanalakshmanan/xDSCUtils

所要求的证书

答案 1 :(得分:3)

我找到了Keith Hill撰写的博客文章Queues,它与此问题没有直接关系,但它确实展示了如何定义包含文档加密密钥用法的证书请求文件。

我现在使用以下请求inf生成自签名证书:

[Version]
Signature = "$Windows NT$"

[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

[NewRequest]
Subject = "CN=test.dsc"
KeyLength = 2048
MachineKeySet = true
RequestType = Cert
KeySpec = AT_KEYEXCHANGE
KeyUsage = CERT_KEY_ENCIPHERMENT_KEY_USAGE

[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"