我正在使用 IX509PrivateKey 为 X.509 证书请求创建密钥(作为“NT AUTHORITY\NETWORK SERVICE”),并且 Create 方法正在生成拒绝访问(我正在从 C# 调用/调用调度接口,因此 HRESULT 被转换为 .NET 异常)。进程监视器还显示访问被拒绝尝试访问密钥文件(正在创建密钥文件)。
这是实际的代码:
IX509PrivateKey privateKey = new CX509PrivateKey() as IX509PrivateKey;
privateKey.Length = request.KeyLength;
privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_FLAG;
privateKey.KeySpec = X509KeySpec.XCN_AT_SIGNATURE;
privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_ALL_USAGES;
privateKey.MachineContext = true;
privateKey.Create();
return privateKey;
如果我改为创建用户密钥集(通过将 MachineContext 设置为 false),我会看到“找不到文件”而不是“拒绝访问”。但是 ProcMon 什么也没显示;不尝试访问任何密钥文件。
在 Process Monitor 中,我能够确定“网络服务”无权访问密钥文件,因此我使用 IX509PrivateKey::SecurityDescriptor 属性来设置它。“网络服务”确实可以访问密钥文件,但我仍然收到来自 Create 的访问被拒绝,并且 ProcMon 仍然显示对该文件的访问被拒绝尝试。
很多 TIA 适合任何和所有想法。