草庐IT

c# - X509商店位置与商店?

coder 2024-06-08 原文

我正在C#DotNet中使用X509Store遍历证书存储。但是,我不清楚证书位置和证书存储之间的区别。例如,位置是LocalUser和LocalMachine。商店的示例是“我的(个人)”和“根”。 LocalMachine上的个人商店与LocalUser上的个人商店有什么区别?在LocalMachine上开设个人商店甚至意味着什么?

最佳答案

有一些专用存储(C#名称为粗体,UI显示名称为斜体):

  • 我的(个人):在搜索叶子/最终实体证书时,通常会搜索该商店。通常,这是唯一具有证书和相关私钥的商店。
  • 如果您使用客户端身份验证证书浏览到站点,则IE将从“我的商店”中选择候选证书。 (向前引用:此位置为CurrentUser)
  • 通过GUI配置IIS时,它将显示“我的商店”中的证书。 (向前引用:此位置为LocalMachine)
  • (受信任的根证书颁发机构):在做出链式信任决策时(例如在TLS中),如果链的另一端在此存储中表示,则原始证书是可信的。
  • 除了此存储中显式的证书之外,它还通过AuthRoot公开虚拟 View 。
  • AuthRoot (第三方根证书颁发机构):当注册其他受信任的根时,出于以下原因,您“应该”在第三方存储中这样做:虽然LocalMachine可以正常运行,但CurrentUser可以运行seems to mostly be for show
  • CertificateAuthority (中间证书颁发机构,称为基础系统的“CA”):这是已知中间证书的存储库。进行链式构建时,系统将在此处,在Root中然后在Internet上寻找父级。如果该链是可信赖的,则可以将链中间的证书缓存在此处以供将来查找。
  • 禁止使用(不受信任的证书):如果在此商店中找到了证书链的一部分,则认为该链不可信。
  • 地址簿(其他人):您知道的证书的集合。是的,关于具体。尝试匹配对等证书时,某些程序/库会对其进行搜索。例如,SignedXml中的按发行人和序列号查找通知。

  • 还有更多标准的,您可以read about them at TechNet。您还可以使用X509Store(string, StoreLocation)重载来创建自己的证书存储。 (它有时对于管理应用程序很有用,但是当您在自定义存储区中拥有私钥时,证书管理器UI会有些困惑;它仅在“我的存储区”中才需要它们)。

    这就是StoreName。最好将StoreLocation视为“商店所有者”。标准用户可以决定他们信任某个私有(private)CA颁发的证书,因此可以将其添加到其根存储中。由于是他们的商店,因此不会影响系统上的任何其他用户。系统本身也拥有商店。例如,计算机的TLS证书确实属于“计算机”,并且可能需要多个管理员来管理它。由于搜索 friend 的东西是非常不寻常的,因此StoreLocation会归结为要使用哪个商店的“作为用户我”(CurrentUser)或“这台计算机”(LocalMachine)。

    现在事情变得有些模糊:在Windows上,几乎每个CurrentUser存储(My商店都有一个明显的异常(exception))都将 View 公开到LocalMachine等效存储中。因此,当枚举CurrentUser\Root中的证书时,您既要获得明确添加到CurrentUser\Root中的证书,也要获得明确添加到LocalMachine\Root中的证书。这会引起混淆,因为您可以在枚举时看到证书,将Remove用作参数,而再次枚举时它仍然存在。

    以我的经验,大多数与证书存储库的交互都在“我的存储库”中。在这一点上,决策树可以归结为以下内容:
  • 我是否具有专用用户帐户的服务?
  • new X509Store(StoreName.My, StoreLocation.CurrentUser)
  • 我是否在没有专用用户帐户的情况下提供服务?
  • new X509Store(StoreName.My, StoreLocation.LocalMachine)
  • 其他
  • new X509Store(StoreName.My, StoreLocation.CurrentUser)

  • 但这是一个很大的概括。

    关于c# - X509商店位置与商店?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166321/

    有关c# - X509商店位置与商店?的更多相关文章

    1. c# - 如何在 ruby​​ 中调用 C# dll? - 2

      如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

    2. C# 到 Ruby sha1 base64 编码 - 2

      我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

    3. 基于C#实现简易绘图工具【100010177】 - 2

      C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

    4. ruby - 正则表达式在哪个位置失败? - 2

      我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

    5. ruby - 下载位置 Selenium-webdriver Cucumber Chrome - 2

      我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1

    6. ruby - Heroku production.log 文件位置 - 2

      我想在heroku.com上查看我的应用程序日志的内容,所以我关注了thisexcellentadvice并拥有我所有的日志内容。但是我现在很想知道我的日志文件实际在哪里,因为“log/production.log”似乎是空的:C:\>herokuconsoleRubyconsoleforajpbrevx.heroku.com>>files=Dir.glob("*")=>["public","tmp","spec","Rakefile","doc","config.ru","app","config","lib","README","Gemfile.lock","vendor","sc

    7. ruby - 在 Ruby 中查找多个正则表达式匹配的模式和位置 - 2

      这应该是一个简单的问题,但我找不到任何相关信息。给定一个Ruby中的正则表达式,对于每个匹配项,我需要检索匹配的模式$1、$2,但我还需要匹配位置。我知道=~运算符为我提供了第一个匹配项的位置,而string.scan(/regex/)为我提供了所有匹配模式。如果可能,我需要在同一步骤中获得两个结果。 最佳答案 MatchDatastring.scan(regex)do$1#Patternatfirstposition$2#Patternatsecondposition$~.offset(1)#Startingandendingpo

    8. ruby-on-rails - 尝试打开 .gitignore 以在文本编辑器中对其进行编辑,但在 OS X Mountain Lion 上找不到文件位置 - 2

      我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位

    9. ruby-on-rails - 在 Rails 中存储(结构化)配置数据的位置 - 2

      对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化

    10. Ruby:数组中的下一个/上一个值,循环数组,数组位置 - 2

      假设我有一个没有特定顺序的随机数数组。假设这些是参加马拉松比赛的人的ID#,他们按照完成的顺序添加到数组中,例如:race1=[8,102,67,58,91,16,27]race2=[51,31,7,15,99,58,22]这是一个简化且有些做作的示例,但我认为它传达了基本思想。现在有几个问题:首先,我如何获得特定条目之前和之后的ID?假设我正在查看运行者58,我想知道谁在他之前和之后完成了比赛。race1,runner58:previousfinisher=67,nextfinisher=91race2,runner58:previousfinisher=99,nextfinishe

    随机推荐