IdentityServer4 + Docker:根据验证过程,远程证书无效。

3

我正在按照IdentityServer4的快速入门指南设置受保护的API并使用客户端(示例2)进行访问。我正在使用.Net Core + Docker for Windows(Windows容器)运行我的测试应用程序。

设置应该类似于以下内容:

enter image description here

当我调用https://<identity-url>/.well-known/openid-configuration时,我可以获取配置信息,但是会先出现已知的“不安全 - 是否确定”的页面。 API 1受到以下保护:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
    .AddIdentityServerAuthentication(options =>
        {
            options.Authority = "https://<identity-url>";
            options.RequireHttpsMetadata = this.Environment.IsProduction();
            options.ApiName = "api1";
        });

我会尽力为您翻译。下面是需要翻译的内容:

并且Config.cs (在IdentityServer) 是根据快速入门文档编写的。

问题:

当我尝试从我的Client调用API 1时,按照快速入门文档的要求,我需要首先访问IdentityServer

var disco = await DiscoveryClient.GetAsync("https://<identity-url>");
if (disco.IsError)
{
    Console.WriteLine(disco.Error);
    return BadRequest(disco.Exception);
}

这导致了以下错误

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

我正在使用.net core web应用程序模板中的默认证书,我认为问题与证书是自签名有关。这个正确吗?

如何正确地信任另一个容器中的自签名证书,以建立连接?


将您的自签名证书添加到其他Docker的信任存储中(请参见B.3 http://docs.jboss.org/teiid/7.1.0.Final/client-developers-guide/en-US/html/appendix-selfcerts.html)。 - Edwin
但是如何在Docker和.NET Core中实现呢?我没有使用Java。 - Alex
在这里,您可以找到相应的PowerShell命令列表:https://blogs.msdn.microsoft.com/zxue/2016/12/19/adding-https-support-to-individual-windows-containers-using-self-issued-certificates/ - d_f
2个回答

1
你可以为容器添加证书,但这仅适用于外部请求,在容器之间,您会收到错误提示远程证书根据验证过程无效,因为不可能验证证书,Docker网络是安全的,并且您可以覆盖策略以允许http而不是https。
IdentityModel具有扩展方法GetDiscoveryDocumentAsync,重载以添加允许http的策略。
    DiscoveryDocumentResponse disco = 
    await client.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest { 
                    Address = "http://<identity-url>", 
                    Policy = { RequireHttps = false } 
                });

0

我在使用Web Api和Swagger作为客户端时遇到了同样的问题。这不是身份验证服务器的问题,而是SSL限制的问题。如果您想在远程服务器上使用SSL和https连接到您的Ids4,唯一的方法是从CA购买证书。将自签名证书放入信任存储库也无法解决问题。您可以使用http协议进行测试,但仅限于测试目的。


我不同意。您可以使用自签名证书和自制的 CA,而不会遇到任何问题。只需将 CA 证书添加到受信任的存储区即可。 - Loul G.

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