我对上述内容有疑问。基本上,我有一个 webmail.domain.com,我使用 IIS 重定向到它。
但是,当需要更新证书时,我必须手动禁用 Webmail 规则,然后运行客户端。否则,它不会更新 webmail.example.com 的证书,因为它正在 example.com/.well-known/acme-challenge 下查找,但它被重定向到不存在的 webmail.example.com/.well-known/acme-challenge。
因此,我编写了一条规则来重写 URL,以便任何查找 /.well-known 的内容都将被重写为https://example.com/.well-known/acme-challenge/whateverthekeyis。
它似乎正确地重写了 URL,但是文件没有被提供。这让我有点困惑。如果我禁用重写规则(除了 Webmail 规则),它就可以很好地完成挑战,所以我不太确定问题是什么。acme-challenge 中有一个用于提供无扩展名文件的 Webconfig,我也在 iis 中设置了它。URL 和物理路径似乎都是正确的。但是,它显然没有提供文件。
当我尝试使用重写规则访问 URL 并将 webmail.example.com 重写为 example.com 时,出现 404.4 未找到错误。
您正在寻找的资源没有与之关联的处理程序。
最可能的原因:
The file extension for the requested URL does not have a handler configured to process the request on the Web server.
请求的 URL https://example.com:443/.well-known/acme-challenge/X2cp9qv-ymePYfNERRjh5n8pmxvlvWxMqZUhyaSL
物理路径 C:\inetpub\wwwroot\.well-known\acme-challenge\X2cp9qv-ymePYfNERRjh5n8pmxvlvWxMqZUhyaSL
但是,如果没有重写规则,我就可以从浏览器访问该 URL。
有任何想法吗?
答案1
请不要对包含 acme-challenges 的文件夹使用重定向。
如果您尝试按照预期的方式重定向请求,则有多种原因会阻止通过 HTTP 进行 Let's Encrypt 域验证:
- 您想要验证特定域。重定向至另一个域将阻止验证。
- 重定向到/强制使用 HTTPS 将阻止验证。验证机器人将仅通过 HTTP 进行检查。
- 每次重定向都会阻止验证。机器人不会遵循重定向。
如果您安装了重写模块,我建议为 acme-challenge 文件夹使用以下 IIS web.config。它会禁用此文件夹的重写/重定向,为无扩展名文件添加 mimetype,并确保使用静态文件处理程序:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="." mimeType="text/plain" />
</staticContent>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" type=""
modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"
scriptProcessor="" resourceType="Either" requireAccess="Read"
allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
</handlers>
<rewrite>
<rules>
<clear />
</rules>
</rewrite>
</system.webServer>
</configuration>
对于没有重写模块的服务器,您可以跳过该<rewrite>
部分。
希望这有帮助,祝你好运!