在.NET中的Windows Server上仅使用公钥将证书添加到证书

时间:2018-05-28 06:44:02

标签: c# .net certificate x509 private-key

以下几行代码是.NET FW 4.6.2控制台应用程序的一部分,在Windows 10上运行时无异常执行。但是在Windows Server 2016上运行时会导致CryptographicException调用Export方法时抛出,表示密钥集不存在(即使以管理员身份运行)。 (如果编译.NET Core 2的代码,它会编译,但可执行文件会在第一行抛出PlatformNotSupportedException。)

Certificate.PrivateKey = RSA;
byte[] Bin = Certificate.Export(X509ContentType.Pfx, password);

背景:Certificate是只有公钥的X509Certificate2RSARSACryptoServiceProvider,其中包含与同一公钥对应的私钥。证书由符合ACME的远程CA(Let's Encrypt)创建,这就是为什么只有公钥可用,以及为什么私钥由客户端保持独立。

代码在Windows 10上运行无异常,生成的PFX文件包含私钥。

问题是:为什么它会在一个案例中抛出异常,而不是另一个案例?建议的解决方案是什么?

控制台应用程序的来源:https://github.com/PeterWaher/IoTGateway/tree/master/Utilities/Waher.Utility.Acme

编译版本: https://waher.se/Downloads/Waher.Utility.Acme.zip

命令行参数,重复这种情况:(用相应的值替换EMAIL,DOMAIN和WEBFOLDER)

Waher.Utility.Acme.exe -let -ce EMAIL -a -nk -dns DOMAIN -dns www.DOMAIN -http WEBFOLDER -f Certificate -pwd Test -v

Windows Server计算机的安全日志中记录了以下事件(虽然它适用于Windows 10计算机):

Log Name:      Security
Source:        Microsoft-Windows-Security-Auditing
Date:          5/28/2018 6:56:27 PM
Event ID:      5061
Task Category: System Integrity
Level:         Information
Keywords:      Audit Failure
User:          N/A
Computer:      Domain
Description:
Cryptographic operation.

Subject:
    Security ID:        Domain\PeterWaher
    Account Name:       PeterWaher
    Account Domain:     Domain
    Logon ID:       0xBFDEC 

Cryptographic Parameters:
    Provider Name:  Microsoft Software Key Storage Provider
    Algorithm Name: UNKNOWN
    Key Name:   Domain\PeterWaher
    Key Type:   User key.

Cryptographic Operation:
    Operation:  Open Key.
    Return Code:    0x80090016

0 个答案:

没有答案