授予用户对私钥的权限

Grant user permission to the private key

安装我的 WCF 服务我还安装了带有私钥的证书。 由于我将 运行ning 服务作为不同的用户,该用户需要访问私钥。我广泛阅读了其他 Whosebug 问题,它们都建议对文件系统中私钥文件的权限进行调整。 我这样做,

        private static void AddUserPermissions(X509Certificate2 certificate, NTAccount user, StoreLocation storeLocation)
        {
            RSACryptoServiceProvider rsaProvider = (RSACryptoServiceProvider)certificate.PrivateKey;

            // Find file 
            string keyPath = FindKeyLocation(rsaProvider.CspKeyContainerInfo.UniqueKeyContainerName, storeLocation);
            FileInfo keyFileInfo = new FileInfo(keyPath);

            // Create new FileSecurity
            FileSecurity keyFileSecurity = keyFileInfo.GetAccessControl();
            keyFileSecurity.AddAccessRule(new FileSystemAccessRule(user, FileSystemRights.Read, AccessControlType.Allow));

            // Apply file security to the file
            keyFileInfo.SetAccessControl(keyFileSecurity);
        }

当我 运行 我的程序并检查私钥文件时,我可以看到,例如 "Network Service" 已添加到权限列表中。

很好,这很有效,但是当 WCF 尝试使用私钥时,它无法访问它。

正在查看 certlm、证书 -> 所有任务 -> 管理私钥.. 我可以看到我的用户不在列表中。通过 GUI 添加我的用户可以解决问题,但我需要在代码中完成!!

加密服务提供商(Microsoft RSA SChannel 加密提供商)

密钥位于C:\ProgramData\Application Data\Microsoft\Crypto\RSA\MachineKeys,此处设置普通文件权限反映在certlm.msc

下一代加密货币(Microsoft 密钥存储提供商)

密钥位于C:\ProgramData\Application Data\Microsoft\Crypto\Keys,此处设置普通文件权限反映在certlm.msc

总结

确保您在正确位置修改正确文件的权限。