New-SelfSignedCertificateEx 失败 NTE_NOT_SUPPORTED

New-SelfSignedCertificateEx fails with NTE_NOT_SUPPORTED

我正在尝试使用 PowerShell 创建一个自签名证书,用于在开发环境中加密和解密数据。我用的是优秀的New-SelfSignedCertificateExPowerShell script。我的 OS 是 Windows 10,我安装了 Windows Management Framework 5.0。这是脚本:

New-SelfSignedCertificateEx `
    -Subject "CN=Test, OU=Development" `
    -NotAfter ([DateTime]::Parse('2099-12-31 11:59:59.9999999')) `
    -ProviderName "Microsoft Software Key Storage Provider" `
    -AlgorithmName ECDH_P256 `
    -KeyLength 4096 `
    -KeySpec Exchange `
    -KeyUsage DataEncipherment `
    -IsCA $false `
    -SignatureAlgorithm SHA256 `
    -FriendlyName Test `
    -StoreLocation LocalMachine `
    -StoreName My `
    -Exportable

第 1 期

执行脚本returns出现以下错误:

New-SelfSignedCertificateEx : CertEnroll::CX509PrivateKey::Create: The requested operation is not supported. 0x80090029 (-2146893783 NTE_NOT_SUPPORTED)
At C:\create-self-signed-certificate.ps1:7 char:1
+ New-SelfSignedCertificateEx `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [New-SelfSignedCertificateEx], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,New-SelfSignedCertificateEx

我研究了错误,但找不到与我的问题直接相关的任何内容。我选择使用密钥存储提供程序代替旧版 CSP。

第 2 期

我应该为 KeySpecKeyUsageEnhancedKeyUsage 参数使用什么值?此证书的用途仅用于加密和解密任意字符串(无 TLS,无代码签名等)

您似乎已经发现,问题在于您在指定 NIST-P256 时将 KeySize 的值指定为 4096。对于 RSA 和 DSA,KeySize 大部分是任意的,但对于椭圆曲线算法,KeySize 由曲线的顺序强制(1 <= d <= n,其中 d 是私钥,n 是顺序)。

所以你真的不能选择 KeySize,它不适合选择曲线。