IdentityServer:根据验证程序,远程证书无效。

42

我正在尝试使用OWin和Thinktecture Identity Server进行SSO设置,但是我无法让SSL证书正常工作。至少我认为这是问题所在。在Visual Studio中一切正常,但是如果我尝试在我的机器上使用IIS,它会给我错误消息:“远程证书根据验证过程无效”。我还尝试将IIS用作客户端,将在Visual Studio中运行的实例视为令牌授权中心,但仍然出现相同的错误。有人对我做错了什么有任何想法吗?

7个回答

94
在我的情况下,我只是试图通过示例(针对ID3v2)来解决问题,并在本地运行时遇到了证书错误。由于一些示例甚至通过owin进行自托管,我甚至不确定它从哪里获取主机端的证书?
无论如何,我的解决方法是将证书复制到受信任的根目录:
1. Windows => 开始 => 运行 MMC.EXE 2. 文件 => "添加/删除插件..." => 证书 3. 添加 > 4. 使用计算机帐户 => 本地计算机 => 完成 5. 确定 6. 进入个人 / 证书 7. 右键单击"localhost",选择复制 8. 粘贴到"受信任的根证书颁发机构" 9. 重新启动以生效
完成。享受吧。

非常感谢。我遇到了这个问题已经好几天了。 - Dexterslab
3
对于那些在添加“补充管理器”时出现MMC崩溃的用户,你也可以尝试运行certlm.msc,并从第4步继续操作。 - Evan
你是最棒的,伙计。 - Daniel Goncalves
1
现在您已经在受信任的根中拥有了带有私钥的证书。这是一个安全漏洞。最好将本地主机导出而不包含私钥,并将其导入到受信任的根中。完整详情请参见 https://blogs.iis.net/robert_mcmurray/how-to-trust-the-iis-express-self-signed-certificate - user1228
此外,对于错误"The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot"也是有帮助的。 - Michael McHaney
痛苦的部分是本地开发,同一项目,总是有效的,突然间它就停止工作了。您的解决方案有效,并希望它能永远解决这个奇怪的问题,非常感谢。 - Cesar

5

在我花费了很多时间之后,解决方案其实相当简单

我只是打开了Certmgr.msc --> 从受信任的根证书颁发机构中删除了本地主机证书。

然后在运行身份验证服务器后,打开我的解决方案, 点击运行,Visual Studio会询问是否要为iis express (ssl)生成新证书, 我点击了是,然后它就开始正常工作了:)


3

您需要将IIS正在使用的任何证书添加到本地计算机的“受信任的根证书颁发机构”存储中。


3

这可能是由于之前证书的错误配置造成的(有时当您不同意安装证书时会发生):

  1. 打开Windows开始菜单并打开Certmgr.msc
  2. 在个人/Certificats下,找到所有本地主机证书并删除它们
  3. 在受信任的根证书中执行相同的操作,然后关闭。
  4. 启动您的应用程序,您将会得到一个异常。
  5. 打开包管理器控制台并执行:dotnet dev-certs https --trust
  6. 重新启动您的应用程序,现在通常您已经有了一个有效的证书。

2
有时候即使完成了上述设置并将URL设置为"https://localhost",也可能无法正常工作,此时应将URL设置为"https://MachineName"。即机器名称应与证书的“发行给”值匹配。

2
将证书添加到受信任的人存储库应该足够,根据作者提供的示例中的自述文件。在生产环境中,最好使用根存储库,因为它是用于CA的,当您在那里添加某个授权时,不仅会信任它,而且由其签名的任何证书都会自动信任。
您可以从微软参考中检查此信息和更多细节。以下是两个存储库简短描述的摘录:
根:用于受信任的根证书颁发机构(CA)的证书存储。
TrustedPeople:用于直接信任的人和资源的证书存储。
附注:我已经测试过了,它可以工作。在我的场景中,我在A机器上有IS和一组使用IS的Web应用程序,而B机器上的IIS证书与A上使用的证书不同,但我只是将其添加到B机器的受信任的人存储库中,“证书错误”就消失了。

-1

对于 .Net Core,将 TrustServerCertificate=False 更改为 TrustServerCertificate=True,就像我下面所示的那样,这将解决您的问题。

"DataConnect": "Server=tcp:127.0.0.1,1433;Initial Catalog=dbName;Persist Security Info=False;User ID=username;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接