授予用户对私钥的权限
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
。
总结
确保您在正确位置修改正确文件的权限。
安装我的 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
。
总结
确保您在正确位置修改正确文件的权限。