以下几行代码是.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
是只有公钥的X509Certificate2
。 RSA
是RSACryptoServiceProvider
,其中包含与同一公钥对应的私钥。证书由符合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