"根据验证程序"

时间:2016-07-25 13:44:03

标签: asp.net ssl iis-express identityserver3 self-signed

以前曾经问过这个问题,但我完全陷入困境,到目前为止,对于我已经在其他问题中列出的任何内容都没有。虽然这是指Identity Server,但我认为我在设置SSL时错过了一些东西。

我的设置如下(这是IIS表示不完整的IIS):

我在标题上收到错误:

app.UseIdentityServerBearerTokenAuthentication(options);

这基本上是从auth.testhost.com:44373/core/.well-known/openid-configuration服务器请求一些开放配置选项。

我的选择是:

Authority = "https://auth.testhost.com:44373/core",
RequiredScopes = new List<string>() { "api" }

在某些示例中,我看到了客户端ID和密码,但它们在我的选项中不可用:这是一个问题吗?

如果您需要查看任何身份服务器选项,请说明并且我会发布。 我运行以下命令来创建证书:

makecert.exe -r -pe -n "CN=auth.testhost.com" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -len 2048

这会生成证书,然后我将其导出到受信任的根证书颁发机构。

据我所知,SSL端口绑定应由Visual Studio处理,因为我正在使用IIS Express。以下是它具有的绑定:

<site name="Authenticator_V2" id="2">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="c:\users\user\documents\visual studio 2015\Projects\Authenticator_V2\Authenticator_V2" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:49755:localhost" />
                    <binding protocol="https" bindingInformation="*:44373:localhost" />
                    <binding protocol="https" bindingInformation="*:44373:auth.testhost.com" />
                </bindings>
            </site>
<site name="APIClient2" id="7">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="C:\Users\user\documents\visual studio 2015\Projects\Authenticator_V2\APIClient2" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:53812:localhost" />
                    <binding protocol="https" bindingInformation="*:44356:localhost" />
                </bindings>
            </site>

这是我的主人档案:

127.0.0.1               localhost
127.0.0.1               hybrid.testhost.com
127.0.0.1               auth.testhost.com

当我去https://auth.testhost.com:44373/时,我的协议仍然有一条红线。我认为这意味着还没有正确配置的东西。我使用的是Chrome,点击证书即可:

"Your connection to this site is not private." 

详细说明:

SHA-1 Certificate
The certificate for this site expires in 2017 or later, and the certificate chain contains a certificate signed using SHA-1.

View certificate

Certificate Error
There are issues with the site's certificate chain (net::ERR_CERT_COMMON_NAME_INVALID).

我查看了ERR_CERT_COMMON_NAME_INVALID错误,似乎是一个Chrome错误。但是我的错误是从尝试连接到身份验证服务器的Web服务服务器抛出的,所以我想我可以忽略这一个???

我还运行netsh检查是否设置了证书绑定:

netsh http show sslcert ipport=0.0.0.0:44373

SSL Certificate bindings:
-------------------------

    IP:port                      : 0.0.0.0:44373
    Certificate Hash             : HAS ODD HASH - REMOVED
    Application ID               : {HAS GUID - REMOVED}
    Certificate Store Name       : MY
    Verify Client Certificate Revocation : Enabled
    Verify Revocation Using Cached Client Certificate Only : Disabled
    Usage Check                  : Enabled
    Revocation Freshness Time    : 0
    URL Retrieval Timeout        : 0
    Ctl Identifier               : (null)
    Ctl Store Name               : (null)
    DS Mapper Usage              : Disabled
    Negotiate Client Certificate : Disabled
    Reject Connections           : Disabled

此时注意到这个哈希值不是我证书的正确哈希值。它适用于IIS Express localhost。我找到了这个链接:IdentityServer: The remote certificate is invalid according to the validation procedure并复制了将localhost证书移动到受信任的根证书颁发机构的步骤,但遗憾的是我仍然有错误。我现在不知道还能做什么。

范围配置:

new Scope
{
    Name = "api",
    DisplayName = "Can call API",
    Enabled = true,
    Type = ScopeType.Resource
    //ScopeSecrets = new List<Secret> {  }
}

我的所有客户都有此范围。

由于

1 个答案:

答案 0 :(得分:1)

通过将除IdentityModel.Jwt以外的所有版本升级到最新版本来修复此问题,该版本提供了在承载选项上设置证书和颁发者名称的选项。这两个都需要设置为错误消失