服务器和客户端错误使用代码中的HTTPS但在浏览器中工作

时间:2017-04-06 00:51:16

标签: https asp.net-core identityserver4 kestrel-http-server

运行新创建的基于IdentityServer4 Asp.Net Core的服务器。它的工作原理是它在没有HTTPS的情况下工作,无论是在验证调用还是提供一些Asp.Net MVC视图。我将其切换为在本地开发环境中使用HTTPS,根据this article生成证书。

从浏览器中,它“有效”。我能够像Chrome那样的文章建议并绕过安全警告来获取Web视图。但是,从.Net客户端我使用IdentityModel NuGet包,只是尝试访问元数据using the Discovery Endpoint现在失败了。 服务器提供“无法验证HTTPS连接”IOException,并且客户端提供“证​​书颁发机构无效或不正确”HttpRequestException。

我猜这与浏览器中的东西是交互式的事实有关,我可以告诉它忽略警告并继续。但是在代码中,特别是使用该库,它给了我异常而不是继续。也许

有没有办法处理这种使用HTTPS和自签名证书更好地运行IdentityServer4 / AspNetCore的场景?有没有可以用DiscoveryClient做的事情,我没有看到?

This question类似,但在这种情况下重新生成证书并没有帮助。我想知道IdentityServer / DiscoveryClient角度是否还有其他原因或见解。

1 个答案:

答案 0 :(得分:5)

很可能是错误"证书颁发机构无效或不正确"是因为客户端无法信任服务器的证书。您可以将您创建的证书安装到您的计算机(客户端正在运行的位置)的根证书颁发机构。

  1. 启动MMC(mmc.exe),为计算机帐户添加“证书”管理单元,并管理本地计算机的证书。
  2. 选择文件>添加/删除管理单元。
  3. 单击“证书”管理单元,然后单击“添加”。
  4. 在“证书”管理单元显示中,选择“计算机帐户”,然后单击“下一步”。
  5. 选择“本地计算机”,然后单击“完成”,然后单击“确定”。
  6. 在左侧导航窗格中,展开“证书(本地计算机)”。
  7. 右键单击“受信任的根证书颁发机构”,然后选择“所有任务”>导入。
  8. 将打开“证书导入向导”。 10.单击下一步。 11.浏览您创建的证书,然后单击“下一步”。
  9. 选择将所有证书放在以下存储中:受信任的根证书颁发机构,然后单击“下一步”,再单击“完成”。
  10. 如果您在iisexpress上运行,它将在您的凭据下运行。因此您必须在步骤4 上将其添加到用户存储。如果您在IIS下运行,则必须将证书添加到计算机。您还可以导入到两个存储

    同时选择用户存储和计算机存储

    user account store

    添加两个snappins 后

    certificate snappins

    导入证书

    import the certificate