【问题标题】:Trusting SSL certificates stored in "Trusted Root Certification Authorities" in c#在 c# 中信任存储在“受信任的根证书颁发机构”中的 SSL 证书
【发布时间】:2015-10-05 22:53:48
【问题描述】:

上下文:

我正在尝试使用 ADFS SSO 并按照本教程首先连接到 Azure AD:

http://www.cloudidentity.com/blog/2013/10/25/securing-a-web-api-with-adfs-on-ws2012-r2-got-even-easier/

成功了。

然后按照其他教程尝试使其连接到我们的 Win Server 2012 R2 上的 ADFS:

http://www.cloudidentity.com/blog/2013/10/25/securing-a-web-api-with-adfs-on-ws2012-r2-got-even-easier/

正如他们在第三篇教程中所说: https://msdn.microsoft.com/en-us/library/dn660967.aspx

我收到 SSL 证书错误:

问题:

我知道我可以绕过证书验证或在 ServicePointManager.ServerCertificateValidationCallback 中放置特殊逻辑来解决此问题,但由于我在本地机器“受信任的根证书颁发机构”中导入了证书...:

  1. ...为什么我的服务仍然抱怨证书?

  2. ...有没有办法告诉我的 C# 服务接受所有证书 在“受信任的根证书颁发机构”商店中?

注意:我确实实现了一个 ServicePointManager.ServerCertificateValidationCallback 并且有效,但是由于我们会得到一大堆客户向我们发送他们的 ADFS 证书,我只想将他们的证书导入cert store 让我们的服务信任他们。

谢谢

【问题讨论】:

  • 请确保您不会错误地将其导入您的个人受信任的根权限。同时,进一步检查证书是否需要中间证书。

标签: c# ssl-certificate single-sign-on adfs3.0


【解决方案1】:

您应该将根证书放入受信任的根证书颁发机构存储区(而不是证书本身)。如果您打开证书并转到证书路径,您将能够查看根证书。

进一步解释:

每个证书都有一个颁发者,这样的颁发者也有一个证书。

通常颁发者是证书颁发机构 (CA)。

(CA 的)此类证书可能由 CA 本身(自签名)或其他父 CA 签名。

所以你在这里有一个父/子关系。根证书是根颁发者的证书,即自签名证书的父/祖父。

在本例中,管理员证书由 CA 签署。 CA 证书是自签名的。在这种情况下,您需要将 CA 证书安装到受信任的根证书颁发机构存储区。

在证书验证方面还有其他因素在起作用。例如,证书具有过期数据,超过该数据将被视为无效。

【讨论】:

  • 哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇!我认为太多人通过实现 ServicePointManager.ServerCertificateValidationCallback 来绕过自签名证书问题,而他们所要做的就是导入证书和颁发者证书!
  • 如果我没有看到 CA 或任何根目录,而只是一个单行名称...?我面临这个问题,即使它被添加到受信任的根目录。
  • @Koder101,这将是一个自签名证书
  • @YacoubMassad,是的,这是一个自签名证书,但我怎样才能让它完全受信任,这样浏览器就不会抱怨。我也跟着这个 - itgroove.net/brainlitter/2012/03/13/… ----------------------------------- 除了导出不是的证书在我的情况下可用(已经有该证书)。但仍然遇到问题。有什么建议,请。
  • @Koder101,您可以使用 X509Chain 类来检查证书。首先使用 Build 方法。然后检查 ChainStatus 元素。这应该会为您提供有关证书为何存在问题的更多信息。
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 2021-05-22
  • 2021-05-31
  • 2014-07-13
  • 2018-07-30
  • 1970-01-01
  • 2016-08-30
相关资源
最近更新 更多