【发布时间】:2010-06-29 16:36:27
【问题描述】:
我正在使用以下代码尝试以编程方式允许 NetworkService 帐户访问密钥:
var RSA = new RSACryptoServiceProvider(
new CspParameters() {
KeyContainerName = "MyEncryptionKey",
Flags = CspProviderFlags.UseExistingKey | CspProviderFlags.UseMachineKeyStore
});
RSA.CspKeyContainerInfo.CryptoKeySecurity.AddAccessRule(
new System.Security.AccessControl.CryptoKeyAccessRule(
new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null),
CryptoKeyRights.GenericAll,
AccessControlType.Allow
)
);
此代码运行无误,但对密钥容器的权限没有影响。
但是,使用命令行工具 aspnet_regiis 来做同样的事情,效果很好:
aspnet_regiis -pa "MyEncryptionKey" "NetworkService"
我正在以完全管理员权限运行 - 如果我不以这些权限运行,则会引发异常。我也以最初创建密钥的用户身份运行。
密钥容器始终具有以下访问规则:
S-1-5-18 -> LocalSystem
S-1-5-32-544 -> Administrators
S-1-5-5-0-135377 -> MyUser
使用 aspnet_regiis,SID,S-1-5-20 被添加到此列表中。我无法通过代码影响它。
我已尝试从 sid 以字符串格式创建安全标识符,以及使用 SetAccessRule 而不是 AddAccessRule。
任何想法如何从代码中实际影响此 ACL 列表?
【问题讨论】:
标签: c# .net cryptography rsacryptoserviceprovider dpapi