Azure LetsEncrypt не может получить доступ к .well-known / acme-challenge для моей функции - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь включить SSL для своей функции Azure, используя расширение сайта letsencrypt для Azure, как описано здесь . Я следовал инструкциям в этой вики и на этом сайте .

Однако при попытке подтвердить веб-сайт я получаю сообщение об ошибке.

Ошибка указывает на невозможность доступа к странице вызова acme (404).

Это мой web.config под .well-known/:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <clear />
      <add name="ACMEStaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Either" requireAccess="Read" />
    </handlers>
    <staticContent>
      <remove fileExtension="." />
      <mimeMap fileExtension="." mimeType="text/plain" />
    </staticContent>
  </system.webServer>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

У кого-нибудь есть идеи о том, что может пойти не так?

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

Вот как вы можете это сделать.

В вашем приложении функций создайте новый прокси-сервер для каталога вызовов (это необходимо, так как вызовом будет http get to /.well-known/acme-challenge /, и по умолчанию функция в приложении функций отвечает только на /api/ .

Вы можете настроить прокси следующим образом. enter image description here

proxies.json

{
  "$schema": "http://json.schemastore.org/proxies",
  "proxies": {
    "LetsEncryptProxy": {
      "matchCondition": {
        "route": "/.well-known/acme-challenge/{code}"
      },
      "backendUri": "http://%WEBSITE_HOSTNAME%/api/letsencrypt/.well-known/acme-challenge/{code}"
    }
  }
}

Важным параметром здесь является шаблон маршрута: /.well-known/acme-challenge/{*rest} это будет соответствовать всем запросам, которые отправляются в каталог вызова.

Обратите внимание, что прокси - это функция предварительного просмотра, и вы должны включить ее, чтобы она работала.

Ссылка: https://github.com/sjkp/letsencrypt-siteextension/wiki/Azure-Functions-Support https://blog.bitscry.com/2018/07/06/using-lets-encrypt-ssl-certificates-with-azure-functions/

0 голосов
/ 28 мая 2019

Я понял это:

Аналогично ответу KetanChawda-MSFT, за исключением того, что прокси-серверу нужно выполнить созданную вами функцию конечной точки API.

Итак, вот функция:

// https://YOURWEBSITE.azurewebsites.net/api/letsencrypt/{code}

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string code, TraceWriter log)
{    
    log.Info($"C# HTTP trigger function processed a request. {code}");

    var content = File.ReadAllText(@"D:\home\site\wwwroot\.well-known\acme-challenge\"+code);
    var resp = new HttpResponseMessage(HttpStatusCode.OK);
    resp.Content =  new StringContent(content, System.Text.Encoding.UTF8, "text/plain");
    return resp;
}

А вот прокси, который запускает эту функцию, когда letsEncrypt пытается проверить вызов acme:

{
  "$schema": "http://json.schemastore.org/proxies",
  "proxies": {
    "LetsEncryptProxy": {
      "matchCondition": {
        "route": "/.well-known/acme-challenge/{code}"
      },
      "backendUri": "http://%WEBSITE_HOSTNAME%/api/letsencrypt/{code}"
    }
  }
}
...