@ChernovGV

Не удается верифицировать домен для ssl Let's encrypt через certbot, что не так с конфигом Nginx?

Добрый день, не получается сгенерировать сертификат из-за ошибки:
Failed authorization procedure. rukzak3d.ru (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from domain.ru/.well-known/acme-challenge/Iurj9ChNH9JNH... [82.146.55.40]: "\r\n404 Not Found\r\n\r\n404 Not Found\r\nnginx/1.19.0"


Читаю, логи прихожу к выводу, что механизм работы подтверждения домена следующий:

1) Certbot создает конфиг nginx вида:
location /.well-known/acme-challenge/Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0 {
default_type "text/plain";
return 200 Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0.DyD11cIvsF3VQsyoJH3me_in7zC0mwIq5myzx10Pa3c;
}

2) Подключает его в самое начало блока http в основном конфиге /etc/nginx/nginx.conf
http {
include /etc/letsencrypt/le_http_01_cert_challenge.conf;


3) Идет по адресу domain.ru/.well-known/acme-challenge/Iurj9ChNH9JNH... и проверяет код ответа, если не 200 то выдает ошибку.

Сейчас конфиг /etc/nginx/nginx.conf такой:
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {

    server {
        charset utf-8;

        listen 443;

        keepalive_timeout   120;


        index index.php index.html;

        root /var/www/sites/domain/web;

        server_name domain.ru;

        index index.php;

        location / {
            try_files $uri /index.php?$args;
        }

        location ^~ /.well-known/acme-challenge/ {
            default_type "text/plain";
            root /var/www/sites/domain/web;
        }
    }
}


Если я в секцию server добавляю код:
http {
...
   server {
        ....
        location /.well-known/acme-challenge/Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0 {
           default_type "text/plain";
           return 200 Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0.DyD11cIvsF3VQsyoJH3me_in7zC0mwIq5myzx10Pa3c;   
        }
}

То браузер по адресу domain.ru/.well-known/acme-challenge/Iurj9ChNH9JNH... отвечает 200-м кодом.
Если вставить в том место где подключается конфиг certbot'м, т.е. в начало секции http:
http {
        location /.well-known/acme-challenge/Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0 {
           default_type "text/plain";
           return 200 Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0.DyD11cIvsF3VQsyoJH3me_in7zC0mwIq5myzx10Pa3c;   
        }
...
   server {
        ....
}

Получаем 404 ошибку :(

Вопрос, как заставить nginx отвечать 200м кодом при подключенном /etc/letsencrypt/le_http_01_cert_challenge.conf в начало секции http? Или как заставить certbot помещать конфиг в секцию server?
  • Вопрос задан
  • 4205 просмотров
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
У вас конфиг слушает 443 порт, а LE проверяет по HTTP, без шифрования.
Ответ написан
Комментировать
@aliubko
добавьте секцию с 80 портом
server {
    listen 80;
    server_name SITE_Name;

    location /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы