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

时间:2018-08-24 10:05:48

标签: docker ssl asp.net-core identityserver4

我正在遵循IdentityServer4的快速入门指南来设置受保护的API,并使用客户端(Sample 2)对其进行访问。我正在使用.Net Core + Windows的Docker(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中)根据快速入门的文档。

问题:

当我尝试从API 1呼叫Client时,我需要先通过以下方式访问IdentityServer

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

这将导致此错误

  

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

我正在使用.net core templates for web applications中的默认证书,并且我认为问题与证书是自签名的有关。这是正确的吗?

在另一个容器中信任自签名证书以建立连接的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我使用Web Api和Swagger作为客户端时遇到相同的问题。这不是身份服务器问题,而是SSL限制。如果要使用SSL和https连接到远程服务器上的Ids4,唯一的方法是从CA购买证书。将自签名证书放入信任存储区也将不起作用。您可以改用http协议,但是当然仅出于测试目的。

答案 1 :(得分:0)

您可以为容器添加证书,但这仅可用于外部请求,在容器之间,您将收到错误的证书。根据验证步骤,远程证书无效,因为这不可能验证证书,docker网络是安全的,您可以覆盖该策略以允许http插入https

软件包 IdentityModel 具有扩展方法 GetDiscoveryDocumentAsync ,具有重载功能,以添加允许http

的策略
function getName() {
    var user = document.getElementById('Username').value;
    var pass = document.getElementById('Password').value;

    for (let f = 0; f < arr.length; f++) {
        if (user == arr[f][0] && pass == arr[f][1]) {              
            document.write("Welcome back ", user, ", we've missed you");
            return; // exit from the function since we've found an account
        }
        if (user == arr[f][0] && pass != arr[f][0])  {
            alert("Your password is incorrect");
            return; // exit from the function since we've found a username match
        }
    }
    // couldn't find match, alert
    alert("Your account does not exist.");
}