#node.js #express #lets-encrypt #azure-webapps
#node.js #экспресс #lets-encrypt #azure-webapps
Вопрос:
Я настроил расширения Let’s Encrypt в веб-приложении Azure. Когда я пытаюсь сгенерировать SSL-сертификаты для пользовательских доменов, я получаю сообщение об ошибке ниже:
The Lets Encrypt ACME server was probably unable to reach http://www.holzlauf.ch/.well-known/acme-challenge/hyDaCURuFoJGi9ASuJdNppayYcjIRpqp3vMLTKbA-hA view error report from Lets Encrypt at https://acme-staging.api.letsencrypt.org/acme/authz/YnGjTUHQa5upTAajCNPOLX_aLLlmRQiRP6uj3a0vAm8 for more information
ошибка источника:
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.
Трассировка стека
[Exception: The Lets Encrypt ACME server was probably unable to reach http://www.holzlauf.ch/.well-known/acme-challenge/hyDaCURuFoJGi9ASuJdNppayYcjIRpqp3vMLTKbA-hA view error report from Lets Encrypt at https://acme-staging.api.letsencrypt.org/acme/authz/YnGjTUHQa5upTAajCNPOLX_aLLlmRQiRP6uj3a0vAm8 for more information]
LetsEncrypt.Azure.Core.Services.<Authorize>d__5.MoveNext() in D:a1sLetsEncrypt.SiteExtension.CoreServicesBaseHttpAuthorizationChallengeProvider.cs:121
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 26
LetsEncrypt.Azure.Core.Services.<Authorize>d__5.MoveNext() in D:a1sLetsEncrypt.SiteExtension.CoreServicesBaseHttpAuthorizationChallengeProvider.cs:131
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 58
LetsEncrypt.Azure.Core.Services.<RequestCertificate>d__5.MoveNext() in D:a1sLetsEncrypt.SiteExtension.CoreServicesAcmeService.cs:44
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 58
LetsEncrypt.Azure.Core.<RequestInternalAsync>d__16.MoveNext() in D:a1sLetsEncrypt.SiteExtension.CoreCertificateManager.cs:231
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 58
LetsEncrypt.Azure.Core.<RequestAndInstallInternalAsync>d__17.MoveNext() in D:a1sLetsEncrypt.SiteExtension.CoreCertificateManager.cs:244
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 58
LetsEncrypt.SiteExtension.Controllers.<Install>d__7.MoveNext() in D:a1sLetsEncrypt-SiteExtensionControllersHomeController.cs:250
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 58
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) 97
System.Web.Mvc.Async.<>c__DisplayClass8_0.<BeginInvokeAsynchronousActionMethod>b__1(IAsyncResult asyncResult) 17
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) 10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() 49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 32
System.Web.Mvc.Async.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0() 58
System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() 228
System.Web.Mvc.Async.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(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__DisplayClass3_6.<BeginInvokeAction>b__4() 35
System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(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.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) 11
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) 45
System.Web.Mvc.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller) 13
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.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) 28
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.InvokeEndHandler(IAsyncResult ar) 152
System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) 126
Ответ №1:
Эта ошибка означает, что letsencrypt не может проверить, действительно ли вы являетесь владельцем домена, для которого вы пытаетесь создать сертификат. Он пытается получить доступ к URL-адресу:
http://www.holzlauf.ch/.well-known/acme-challenge/hyDaCURuFoJGi9ASuJdNppayYcjIRpqp3vMLTKbA-hA
Но сервер letsencrypt не может достичь этого местоположения.
Итак, давайте сделаем шаг назад. Как правило, способ работы letsencrypt заключается в том, что ваш certbot
(или любой другой клиент acme, который вы используете) создает конечную точку, доступную по http://www.example.com/.well-known/<some-hash>
адресу, а затем запрашивает у сервера доступ к ней. Если результат HTTP равен 200, то сервер Letsencrypt ACME считает это успешным и выдает сертификат. Если результат равен 400 или более, то это сбой, и возвращается ошибка, подобная приведенной выше.
То, как именно создается хорошо известное местоположение, зависит от того, какой плагин certbot вы используете. Например:
- плагин webroot разместит файл в вашей файловой системе в том месте, которое вы укажете в конфигурации
- плагин nginx обновит вашу конфигурацию nginx, чтобы при получении ресурса возвращался код состояния HTTP 200
- плагин DNS обновит ваши записи DNS, чтобы доказать аналогичным образом.
Итак, учитывая все это, я не знаю точно, в чем здесь проблема, но, похоже, вы неправильно настроили плагин. Надеюсь, хотя это дает вам достаточно информации для исправления. И если это не так, пожалуйста, прокомментируйте ниже и уточните, какой плагин вы используете и какова его конфигурация.
Редактировать
Если вы перейдете сюда: https://acme-staging.api.letsencrypt.org/acme/authz/YnGjTUHQa5upTAajCNPOLX_aLLlmRQiRP6uj3a0vAm8
Вы можете увидеть более подробное описание полученной ошибки.
Ответ 403 запрещен. Это означает, что ваш веб-сервер заблокировал доступ к этому URL. Вам необходимо убедиться, что ваш веб-сервер (IIS, apache, nginx) разрешает доступ. Точный способ исправить это зависит от того, какой плагин DNS вы используете. Список см. В документации. Нажмите на ссылку и следуйте инструкциям.
Комментарии:
1. Спасибо за ваш ответ. Я использую DNS-провайдера. Sry Я новичок в этом :/
2. Какой плагин DNS вы используете? Смотрите мою поправку к ответу.