Azure LetsEncrypt 扩展无法访问 Umbraco 应用中的 .well-known/acme-challenge

Azure LetsEncrypt extension cannot access .well-known/acme-challenge in Umbraco app

我正在主持 Ubraco CMS app in Azure. After following the instructions in this blog post, I am receiving the following error when I try to request and install a LetsEncrypt certificate using the Azure Let'sEncrypt site extension:

System.Exception: The Lets Encrypt ACME server was probably unable to reach http://domain.com/.well-known/acme-challenge/token

我已确认我的所有应用设置都正确,我的扩展程序已正确安装,并且似乎没有任何网络问题。是什么导致了这个问题?

事实证明问题与以下事实有关:ACME 挑战文件是无扩展名的,Umbraco 管道尝试使用 OWIN 将所有无扩展名请求路由到 CMS 中的文档。

James Dibble 撰写了一篇关于如何创建 OWIN 配置文件以拦截对“/.well-known”的任何请求并改为提供 ACME 挑战文件的出色指南:

https://www.jdibble.co.uk/blog/using-letsencrypt-with-umbraco

您可以在这里找到他的代码要点:

https://gist.github.com/dibble-james/f47b0cba3494381588482c7f185861bf

他的教程中遗漏的一件事是我还必须安装 Microsoft.Owin.StaticFiles 包。我也不知道他所说的 "update the owin:appStartup app setting in your web.config," 是什么意思,因为我以前从未使用过 OWIN。如果你只是复制他的代码,那么你会想要改变你的设置:

<add key="owin:appStartup" value="UmbracoDefaultOwinStartup" />

为此:

<add key="owin:appStartup" value="Startup" />

这里有一篇关于原因的详细文章:

http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

我只是将验证文件作为 index.html 写入所需的文件夹中,并具有以下重写规则,以便它为 html 文件提供服务:

    <rule name="AcmeChallenge" patternSyntax="Wildcard">
      <match url=".well-known/acme-challenge*" />
      <action type="Rewrite" url="{R:0}/index.html" />
    </rule>

在站点的 web.config 文件中,将 ~/.well-known 添加到 umbracoReservedPaths 元素,Let's Encrypt 将能够访问验证 url。

<add key="umbracoReservedPaths" value="~/umbraco,~/.well-known" />