Azure应用服务证书(dev)问题

时间:2017-05-15 04:03:41

标签: ssl deployment oauth identityserver4 azure-web-app-service

在Azure App服务上部署Identity Server时遇到问题。以下是设置。

JSclient在本地托管。 Auth Server在Azure App Service上。

                var certificate = SSLHelper.GetCertificateCurrentUserMyStore(signingsslthumbprint);
            builder
                .AddSigningCredential(certificate)
                .AddSecretParser<ClientAssertionSecretParser>()
                .AddSecretValidator<PrivateKeyJwtSecretValidator>()
                .AddAspNetIdentity<User>()
                .AddProfileService<ProfileService>();

我创建了两个证书,一个用于签名,另一个用于交换。

`New-SelfsignedCertificateEx -Subject&#34; CN = devsignature&#34; -EKU 1.3.6.1.5.5.7.3.3 -KeySpec&#34;签名&#34; -KeyUsage&#34; DigitalSignature&#34; -StoreLocation&#34; CurrentUser&#34; -SAN $ domains -SignatureAlgorithm&#34; SHA256&#34; -KeyLength 2048 -FriendlyName&#34; DevSignature&#34; -NotAfter $([System.DateTime] :: Now.AddYears(15)) - 出口

New-SelfsignedCertificateEx -Subject&#34; CN = * .mydomain.com&#34; -EKU 1.3.6.1.5.5.7.3.1 -KeySpec&#34; Exchange&#34; -KeyUsage&#34; DigitalSignature&#34; -StoreLocation&#34; CurrentUser&#34; -SAN $ domains -SignatureAlgorithm&#34; SHA256&#34; -KeyLength 2048 -FriendlyName&#34; DEVExchange&#34; -NotAfter $([System.DateTime] :: Now.AddYears(15))-Exportable`

以下是用于重新获取所有证书的应用程序服务设置。

enter image description here

当我在Windows机箱上部署auth服务器(不是本地机器但在另一台服务器上)时,这是有效的。但是,当我部署到IIS ...

   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext() | Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke

119 | 2017-05-14 20:32:04.4131 | RD0003FF635548 |错误| ExceptionHandlerMiddleware | AsyncTaskMethodBuilder.Start =&gt; d__8.MoveNext =&gt; ExceptionHandlerMiddleware.Invoke |发生了未处理的异常:未配置签名凭据。无法创建JWT tokenEXCEPTIONSystem.InvalidOperationException:未配置签名凭据。无法创建JWT令牌

我正在使用Dev证书(不是真正的证书)。这是为了分阶段部署。

过去两天试过这个并且无法开始工作。

编辑:这甚至没有打到api服务器。这就是当JSClient登录重定向到 - &gt; AuthServer。

有人可以帮忙吗?

谢谢,

编辑:

我得到了更多感谢@moritzg和@Austin Dimmer。现在,当我使用令牌调用webapi时,它会抛出我的IDX10803:无法从以下位置获取配置:&#39; https://myauthserver.com/.well-known/openid-configuration&#39;。

有什么想法吗?

EDIT2:

以下是来自api服务器的调试日志

643 | RD0003FF635548 | DEBUG | LoggingConnectionFilter | MoveNextRunner.InvokeMoveNext => <ReadAsync>d__16.MoveNext =>
     

LoggingStream.Log | ReadAsync [2266] 47 45 54 20 2F 61 70 69 2F 63 6F   6F 6D 6D 6F 6E 2F 63 61 74 61 ................ GET / api / myendpoint   HTTP / 1.1 Cache-Control:无缓存连接:Keep-Alive Pragma:   no-cache接受:text / plain Accept-Encoding:gzip,deflate,sdch,br   Accept-Language:en-US,en; q = 0.8授权:持票人   eyJhbGciOiJSUzI1NiIsImtpZCI6IkVEQTYsdfsdfdsfsdfdsfdscHM6 .........   Cookie:ARRAffinity = e414d40c85d90229be06c3c9de2fzxczxczxc3 .......   主持人:myapiserver Max-Forwards:10 Referer:   https://myapiserver/swagger/用户代理:Mozilla / 5.0(Windows NT 10.0;   Win64平台; x64)AppleWebKit / 537.36(KHTML,和Gecko一样)   Chrome / 58.0.3029.110 Safari / 537.36 X-LiveUpgrade:1   X-WAWS-Unencoded-URL:/ api / myendpoint X-Original-URL:/ api / myendpoint   X-ARR-LOG-ID:7c2afdfe4c-d3ea-dfer-9570-ffgfgfgfgfd DISGUISED-HOST:   myapiserver X-SITE-DEPLOYMENT-ID:myapiserver WAS-DEFAULT-HOSTNAME:   myapiserver.azurewebsites.net X-Forwarded-For:XXX.XXX.XXX.XXX:XXXXX,   XXX.XXX.XXX.XXX:XXXXX X-ARR-SSL:2048 | 256 | C = XX,S = XXXXX,L = XXXXX,   O = XXXX,OU = IT,CN = .mydoamin.com,E = xxx@xxx.com | C = XXX,S = XXXXX,L = XXXX,   O = XXXXX,OU = IT,CN = .mydomain.com,E = xxx@xxx.com MS-ASPNETCORE-TOKEN:   XXX-XXX-XXX-XXXX-XXXXXXXXX X-Forwarded-Proto:https

     

|   Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LoggingStream.Log   650 | RD0003FF635548 |调试| LoggingConnectionFilter |   StreamSocketOutput.ProducingComplete =&gt; LoggingStream.Write =&gt;   LoggingStream.Log |写[111] 48 54 54 50 2F 31 2E 31 20 35 30 30 20   49 6E 74 65 72 6E 61 6C 20 53 65 72 76 65 72 20 45 72 72 6F 72 0D 0A   44 61 74 65 3A 20 57 65 64 2C 20 31 37 20 4D 61 ...... HTTP / 1.1 500   内部服务器错误日期:XXXXXXXXXXXXXXXXXXXXXX内容长度:0   服务器:Kestrel

     

|   Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LoggingStream.Log   651 | RD0003FF635548 |调试|红隼| Frame.WriteSuffix =&gt;   Connection.Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl.End   =&GT; KestrelTrace.ConnectionKeepAlive |连接ID&#34; 0HL4SVIU4EDP3&#34;完成保持活跃的反应。 |   Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelTrace.ConnectionKeepAlive

以下是来自API服务器的错误日志

at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__6.MoveNext()
     

|   Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware + d__6.MoveNext   610 | RD0003FF635548 |错误|红隼|   d__2.MoveNext =&gt; Frame.ReportApplicationError   =&GT; KestrelTrace.ApplicationError |连接ID&#34; 0HL4SVIU4EDP2&#34;:未处理的异常被抛出   application.EXCEPTIONSystem.InvalidOperationException:IDX10803:   无法从以下位置获取配置:   &#39; https://myauthserver/.well-known/openid-configuration&#39 ;. ---&GT;   System.IO.IOException:IDX10804:无法从以下位置检索文档:   &#39; https://myauthserver/.well-known/openid-configuration&#39 ;. ---&GT;   System.Net.Http.HttpRequestException:发送时发生错误   请求。 ---&GT; System.Net.Http.WinHttpException:安全性错误   发生在   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
  在System.Net.Http.WinHttpHandler.d__105.MoveNext()
  ---内部异常堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Net.Http.HttpClient.d__58.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext()   ---内部异常堆栈跟踪结束---在Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.d__3.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
  在   Microsoft.IdentityModel.Protocols.ConfigurationManager 1.<GetConfigurationAsync>d__24.MoveNext() --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.ConfigurationManager 1.d__24.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult()   在   Microsoft.AspNetCore.Authentication.AuthenticationHandler 1.<InitializeAsync>d__52.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware
1.d__18.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationMiddleware.d__7.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.d__7.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.d__8.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
  在   Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.d__3.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
  在   Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.d__2.MoveNext()   |   Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelTrace.ApplicationError

在Identity Server(AuthServer)本身上没有生成日志。

我在Debug log

中找到了以下有趣的内容

WAS-DEFAULT-HOSTNAME:myapiserver.azurewebsites.net

这指向Azurewebsite网址,而不是myapiserver.mydomain.com,我已经在azure域设置上配置了它。不确定这是否对此有任何影响,但无论如何......

最终编辑:

我已经找到了这个问题的根源。基本上在App服务中,您只能访问CurrentUser的个人商店,这意味着自签名证书不起作用。您需要购买一个真实的。 (拇指向下到Mircorsoft Azure!)。

由于

2 个答案:

答案 0 :(得分:4)

您确定自己的设置是否正确?这是我们办理证书的方式:

  • 将证书上载到Azure SSL
  • WEBSITE_LOAD_CERTIFICATES与指纹
  • 一起使用

在我的ConfigureServices:`

中使用它
var certs = new X509Certificate2Collection();

if (CurrentEnvironment.IsDevelopment())
{
       certs.Add(new X509Certificate2(Configuration["X509Certificate:CertificateName"], Configuration["X509Certificate:CertificatePassword"]));
 } else
 {
       var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
       store.Open(OpenFlags.ReadOnly);
       certs = store.Certificates.Find(X509FindType.FindByThumbprint, Configuration["WEBSITE_LOAD_CERTIFICATES"], false);
 }

然后:.AddSigningCredential(certs[0])

答案 1 :(得分:-2)

如果您正在运行IIS,请检查运行Appool帐户的帐户是否具有证书私钥的访问权限。

启动MMC添加证书插件然后选择您的证书并转到操作 - &gt;所有任务 - &gt;管理私钥并确保帐户具有正确的权限。

也许还将证书放在LocalMachine而不是CurrentUser?

最后检查安全组/防火墙问题是否阻止从服务器到域的通信并返回到服务器。我们在AWS ElasticBeanstalk环境中观察到类似的问题('IDX10803:无法从:https://myauthserver.com/.well-known/openid-configuration'获取配置)。

祝你好运!