以编程方式将证书添加到个人存储

2023-12-25

我正在开发的项目包含一个与 WCF Web 服务通信的 MVC 网站,并通过 Windows 身份进行身份验证。我有一个身份委托证书,我正在尝试以编程方式添加该证书。要手动执行此操作,我在 mmc 中打开证书管理单元,将 .pfx 文件导入到 Personal 中并输入密码。然后,我必须单击“管理私钥”并授予 IIS_IUSRS 权限。 为了复制这个过程,我提出了以下控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        var cert = new X509Certificate2("location.pfx", "password", X509KeyStorageFlags.MachineKeySet);
        AddCert(StoreName.My, StoreLocation.LocalMachine, cert);
        AddAccessToCertificate(cert, "IIS_IUSRS");
    }

    private static void AddCert(StoreName storeName, StoreLocation storeLocation, X509Certificate2 cert)
    {
        X509Store store = new X509Store(storeName, storeLocation);
        store.Open(OpenFlags.ReadWrite);
        store.Add(cert);
        store.Close();
    }

    private static void AddAccessToCertificate(X509Certificate2 cert, string user)
    {
        RSACryptoServiceProvider rsa = cert.PrivateKey as RSACryptoServiceProvider;

        if (rsa != null)
        {
            string keyfilepath =
                FindKeyLocation(rsa.CspKeyContainerInfo.UniqueKeyContainerName);

            FileInfo file = new FileInfo(keyfilepath + "\\" +
                rsa.CspKeyContainerInfo.UniqueKeyContainerName);

            FileSecurity fs = file.GetAccessControl();

            NTAccount account = new NTAccount(user);
            fs.AddAccessRule(new FileSystemAccessRule(account,
            FileSystemRights.FullControl, AccessControlType.Allow));

            file.SetAccessControl(fs);
        }
    }
    private static string FindKeyLocation(string keyFileName)
    {
        string text1 =
        Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
        string text2 = text1 + @"\Microsoft\Crypto\RSA\MachineKeys";
        string[] textArray1 = Directory.GetFiles(text2, keyFileName);
        if (textArray1.Length > 0)
        {
            return text2;
        }
        string text3 =
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        string text4 = text3 + @"\Microsoft\Crypto\RSA\";
        textArray1 = Directory.GetDirectories(text4);
        if (textArray1.Length > 0)
        {
            foreach (string text5 in textArray1)
            {
                textArray1 = Directory.GetFiles(text5, keyFileName);
                if (textArray1.Length != 0)
                {
                    return text5;
                }
            }
        }
        return "Private key exists but is not accessible";
    }
}

不幸的是这给出了错误:

未指定安全令牌发行者的地址。必须在目标绑定中指定显式发行者地址 'https://service.svc https://service.svc' 或者必须在凭据中配置本地颁发者地址。

我认识到我对这些东西有很大的知识差距,所以我希望得到一些指导!

我的问题是,手动流程和自动流程有什么区别?


这行:

var cert = new X509Certificate2("location.pfx", "password", X509KeyStorageFlags.MachineKeySet);

本来应该

var cert = new X509Certificate2("location.pfx", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);

It was X509KeyStorageFlags.PersistKeySet那是失踪了。

我有一些有关证书的有用信息,请参见此处 http://paulstovell.com/blog/x509certificate2.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式将证书添加到个人存储 的相关文章

随机推荐

  • Unix - 在 shell 脚本中排序

    如何根据字段位置对文件进行排序 例如 我需要对下面给定的文件进行排序 基于第 4 5 和 8 名位置 请帮忙 我尝试了以下命令 它不起作用 sort d k 3 42 44 k 4 47 57 k 5 59 70 k 8 73 82 010
  • 如何从外部功能镜头转向功能镜头

    在我开始更好地使用函数式编程的过程中 在 SO 家族成员的帮助下 我发现了什么lens https bartoszmilewski com category lens 我什至通过下面的链接对其进行了一些研究 以了解有关它们的更多信息 htt
  • 如何与剧作家一起下载?

    我正在尝试使用以下命令从网站下载文件剧作家 https github com microsoft playwright 触发下载的按钮做了一些js 然后开始下载 使用单击按钮 click函数触发下载但显示错误 失败 下载错误 我尝试过使用
  • 我可以在 Mono CSharpRepl 中重新加载程序集吗?

    因此 我有 Python 背景 现在开始在 Mac 上使用 C 和 Mono 我最近才发现Mono CSharpRepl 工具 http www mono project com CsharpRepl并希望使用它来实现与 Python 中类
  • Java中的互斥方法执行

    我有两种方法 a and b 虽然我可以接受多个线程同时访问任何方法 这是可取的 但我不希望任何线程进入a while b 正在被执行 我怎么做 Edit 1 假设有 4 个线程Thread 1正在访问A 我想要的是所有 4 个线程都不应该
  • Angular REST API 安全性

    当我使用 Angular 消费 REST API 请求时 我的应用程序出现问题 Web 服务 URL 存储在 Angular 服务或控制器 js 文件中 因此 如果我有登录网络服务来检查用户名和密码 例如 最终用户或开发人员可以获取此网址并
  • 测试未通过:未定义方法“验证!”对于 nil:NilClass?

    我有以下失败 Failures 1 RelationshipsController creating a relationship with Ajax should increment the Relationship count Fail
  • 页面重新加载后记住 jQuery 选项卡位置

    我有一个包含一些 GridView 的页面 我使用选项卡菜单将它们保存在选项卡中 有四个选项卡 我的问题是 当页面重新加载时 选项卡会重置为第一个选项卡 HTML div class tabbed box nbsp nbsp div cla
  • 嵌入 hsql 的一些有趣的事情

    我只是对某些事情感到好奇 我在我的项目中使用 hsql 当然是嵌入式的 有时我觉得需要可视化 hibernate 生成的内容 我拿了一份 dbvisualizer 的免费副本 这是 hsqljdbc properties jdbc url
  • 如何为 postgres 编写 DELETE CASCADE?

    我正在为 postgres 手动构建 DELETE CASCADE 语句 我有一个 交易 和一个 切片 表 相关关系如下所示 Table public slice Column Type Modifiers id text not null
  • 如何在 Hadoop mapReduce 中获取 Kerberos 而不是委托令牌?

    我是一名 Java 用户 当向 Hadoop mapReduce 提交作业时 它使用 Kerberos 对 Hadoop 进行身份验证 成功后会创建委派令牌 并将其与作业提交一起传递给 Hadoop 而不是 kerberos 票证 出于安全
  • 当 SQL 查询受限时与调用整行相比,性能有何优势?

    通过在查询中仅选择所需字段而不是查询整行 可以带来多少性能优势 例如 如果我有一行 10 个字段 但只需要显示 5 个字段 是否值得只查询这 5 个字段 此限制带来的性能优势与稍后需要返回并在 sql 查询中添加字段的风险相比有何不同 您需
  • 如何在 Objective C 中将类对象转换为 json 字符串

    1 我创建类对象 然后使用此代码为我的类添加值 csJastorPollQuestion pq csJastorPollQuestion alloc initWithID 01 Name AAA 2 我在 NSLog 中显示了 csJast
  • Flask Restful NoAuthorizationError 缺少授权标头

    我使用 Python 3 6 在生产模式下在服务器上运行 Flask Restful 并访问需要 jwt 身份验证的端点 但我不断收到 NoAuthorizationError Missing Authorization Header 错误
  • InputText PrimeFaces 不应用 maxlength

    我将 PrimeFaces 3 4 与 PrimeFaces Mobile 0 9 3 结合使用 我在 inputText 属性中指定了 maxlength 但它没有在 HTML 中呈现 我的代码
  • x87 精度如何影响平方根?

    我编写了一些代码来测试 fsqrt 函数 但结果对我来说并不完全有意义 这是代码 delphi 中 uses mmsystem var rand longint 123456789 function rng longint asm imul
  • 如何将vi中的代码复制到剪贴板

    我知道如何在VI中复制 但我未能将其复制到其他应用程序中 这意味着我未能将它们复制到剪贴板中 我怎样才能做到这一点 附 以便更加倾斜 我还想问如何将剪贴板中的内容复制到vi 编辑 我正在使用 MacO 运行 Vim 看来 yy 在这里不起作
  • Numpy:点(a,b)和(a * b).sum()之间的差异

    对于一维 numpy 数组 这两个表达式应该产生相同的结果 理论上 a b sum a sum dot a b a sum 后者使用dot 并且速度更快 但哪一个更准确呢 为什么 接下来是一些上下文 我想使用 numpy 计算样本的加权方差
  • 代码是HttpClient或servlet API来解析Cookie头

    Apache HttpClient 或 servlet API 中是否有任何现有代码可以解析 Cookie 标头并从包含 name1 value1 name2 value2 的字符串中获取 Cookie 列表 编写代码来解析它似乎并不太难
  • 以编程方式将证书添加到个人存储

    我正在开发的项目包含一个与 WCF Web 服务通信的 MVC 网站 并通过 Windows 身份进行身份验证 我有一个身份委托证书 我正在尝试以编程方式添加该证书 要手动执行此操作 我在 mmc 中打开证书管理单元 将 pfx 文件导入到