【问题标题】:Azure Let's Encrypt errorAzure 让我们加密错误
【发布时间】:2016-08-10 12:12:03
【问题描述】:

我正在尝试按照以下说明让 Azure Let's encrypt 网站插件适用于我的 Azure 网站:

https://gooroo.io/GoorooTHINK/Article/16420/Lets-Encrypt-Azure-Web-Apps-the-Free-and-Easy-Way/20047#.VxUIbKgrKUl

但我在运行它时遇到授权错误。我不知道从哪里开始尝试解决这个问题,任何帮助都会非常受欢迎。

错误如下:

Microsoft.Rest.Azure.CloudException:对象 ID 为“{same id here??}”的客户端“{id}”无权执行行动 'Microsoft.Web/sites/read' 超出范围 '/subscriptions/{subscription id} /resourceGroups/Default-Web-NorthEurope/providers/Microsoft.Web/sites/{sitename}'。 在 Microsoft.Azure.Management.WebSites.SitesOperations.d__29.MoveNext()

更新

这是访问 Web 应用程序的原则的问题。

我决定在这里完成特洛伊狩猎演练: https://www.troyhunt.com/everything-you-need-to-know-about-loading-a-free-lets-encrypt-certificate-into-an-azure-website/

这非常好 - 他使用旧的 azure 门户设置活动目录,我发现它更有用,因为我可以实际看到发生了什么。

无论如何,我已经完成了整个过程,直到实际的证书请求,现在我收到了一个 403 服务器错误返回:

The remote server returned an error: (403) Forbidden.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.WebException: The remote server returned an error: (403) Forbidden.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[WebException: The remote server returned an error: (403) Forbidden.]
   System.Net.HttpWebRequest.GetResponse() +1390
   ACMESharp.AcmeClient.RequestHttpPost(Uri uri, Object message) +642

[AcmeWebException: Unexpected error]
   ACMESharp.AcmeClient.AuthorizeIdentifier(String dnsIdentifier) +435
   LetsEncrypt.SiteExtension.Core.CertificateManager.Authorize(Target target) in c:\Projects\LetsEncrypt-SiteExtension\LetsEncrypt-SiteExtension\LetsEncrypt.SiteExtension.Core\CertificateManager.cs:518
   LetsEncrypt.SiteExtension.Core.CertificateManager.Auto(Target binding) in c:\Projects\LetsEncrypt-SiteExtension\LetsEncrypt-SiteExtension\LetsEncrypt.SiteExtension.Core\CertificateManager.cs:441
   LetsEncrypt.SiteExtension.Core.CertificateManager.RequestAndInstallInternal(Target target) in c:\Projects\LetsEncrypt-SiteExtension\LetsEncrypt-SiteExtension\LetsEncrypt.SiteExtension.Core\CertificateManager.cs:244
   LetsEncrypt.SiteExtension.Controllers.HomeController.Install(RequestAndInstallModel model) +604
   lambda_method(Closure , ControllerBase , Object[] ) +104
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +169
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
   System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9644037
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

【问题讨论】:

  • 我没能解决这个问题。你弄明白了吗?
  • 遗憾的是,我在使用 Azure 时遇到了各种各样的问题,因为我同时订阅了开发人员福利计划和另一个订阅。我得出的结论是,我已经花费了更多的时间购买证书以试图解决它,并且每次我有一个需要 https 的新站点时都不想经历这一切(这几乎是任何你想在谷歌上排名的东西)正如特洛伊在他的帖子中提到的那样,这个过程需要大量的时间自动化。
  • “这是访问 Web 应用程序的原则的问题。” - 你能澄清一下吗?这可能是原始问题的答案,很多人会来这里寻找(包括我)
  • 无耻插件,我写了一个WebJob,应该比站点扩展更可靠:github.com/ohadschn/letsencrypt-webapp-renewer

标签: azure ssl lets-encrypt


【解决方案1】:

添加应用注册后,需要将其作为角色分配添加到具有“贡献者”角色的资源组中。

如果你忘记了,你会得到上面的错误信息。

完成此操作后,请重新启动应用服务,然后再尝试运行 Lets encrypt 扩展。

【讨论】:

  • 这应该设置为答案,它至少对我有用。
  • 非常感谢。它对我有用,需要等待一分钟才能完成重新启动应用服务。
【解决方案2】:

我遇到了完全相同的异常,并按照以下步骤解决了它

  1. 导航到 Azure 门户中的订阅
  2. 选择托管应用服务的订阅
  3. 选择访问控制 (IAM)
  4. 添加新实体
  5. 选择角色贡献者
  6. 搜索服务主体
  7. 添加用户

这立即解决了访问权限不足的异常

更新steps (5. Register Service Principal) 之后,请确保您已登录到正确的订阅。就我而言,我在错误的订阅中创建了服务主体,因此该主体未正确分配给正在使用的应用服务

【讨论】:

    【解决方案3】:

    我在新的 Azure 应用服务中遇到了同样的问题。事实证明,在运行 Let's Encrypt 向导之前,我必须实际部署一个 Web 应用程序。当空站点的默认 Azure 应用服务登录页面是内容时,向导无法完成其工作。

    【讨论】:

    • 我想知道为什么向导不会使用默认登录页面来实现它的魔力。感谢您的信息!
    【解决方案4】:

    对我来说,当我的 ResourceGroup 与我的 ServicePlanResourceGroup 不同时,就会出现这个问题。

    因此,如果这些不相等,则除了 ResourceGroup 之外,您还需要将您创建的 App 注册(您为其创建密钥的 clientId)添加到 ServicePlanResourceGroup。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题。

      我通过不在 Azure Let's Encrypt 站点扩展配置中指定自定义域(例如 lybecker.com)解决了这个问题,而是使用了完整的 lybecker.onmicrosoft.com

      【讨论】:

      • 我看不到您在 Azure Lets Encrypt 站点扩展中输入自定义域的位置。它在哪里?
      【解决方案6】:

      这是访问的问题。请检查您提到的文章的5.注册服务主体部分。当使用 LetsEncrypt 页面上的 ApplicationId 完成该部分时,您是否具有相同的 ApplicationId?同样的秘密?检查一下,因为这一步看起来有问题。

      附:我刚刚检查了该演练,没有您提到的错误。

      【讨论】:

        猜你喜欢
        • 2016-06-27
        • 2017-10-17
        • 2016-08-30
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        相关资源
        最近更新 更多