我正在尝试使用letsencrypt网站扩展名(如here中所述)来为我的azure功能启用SSL。我正在该Wiki和此website上按照说明进行操作。
但是,当它尝试验证网站时出现错误。
该错误表明无法访问acme-challenge页面(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>
有人对可能出什么问题有任何想法吗?
答案 0 :(得分:3)
这是您可以做到的方式。
在函数应用中,为挑战目录创建新的代理(这是必需的,因为挑战将是http到达/.well-known/acme-challenge
/,并且默认情况下,函数应用中的函数只会在{ {1}}。
proxies.json
/api/
这里的重要设置是路由模板:{
"$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}"
}
}
}
,它将匹配所有发送到质询目录的请求。
请注意,代理是预览功能,必须启用它才能使其正常工作。
参考: 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/
答案 1 :(得分:0)
我知道了:
类似于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;
}
这是当letEncrypt尝试验证acme挑战时触发该功能的代理:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"LetsEncryptProxy": {
"matchCondition": {
"route": "/.well-known/acme-challenge/{code}"
},
"backendUri": "http://%WEBSITE_HOSTNAME%/api/letsencrypt/{code}"
}
}
}