Ошибка авторизации при попытке получить SSL-сертификат с помощью certbot.

Вопрос или проблема

Я недавно купил домен, хостинг и VPS на Ubuntu 22.04, все на Godaddy.
Домен и хостинг работают, я могу получить доступ к сайту, введя URL.
Но когда я пытаюсь получить SSL-сертификат с помощью certbot, я получаю следующее:

root@35:~# sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: cihanbatasul.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Requesting a certificate for cihanbatasul.com

Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems:
  Domain: cihanbatasul.com
  Type:   unauthorized
  Detail: 92.205.171.180: Invalid response from http://cihanbatasul.com/.well-known/acme-challenge/gGguqH44EsxtOmUeswWsjDx9xtSR70HrJzwEBjXuaZQ: 404

Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache server and that it is accessible from the internet.

Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

Мой файл 000-default.conf:

<VirtualHost *:80>
        # Директива ServerName устанавливает схему запроса, имя хоста и порт,
        # которые сервер использует для идентификации себя. Это используется при создании
        # URL-адресов переадресации. В контексте виртуальных хостов ServerName
        # указывает какое имя хоста должно быть в заголовке Host: запроса,
        # для совпадения с этим виртуальным хостом. Для виртуального хоста по умолчанию 
        # это значение не решающее, так как используется в качестве хоста последней инстанции.
        # Однако, вы должны задать это значение для любого другого виртуального хоста явно.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Доступные уровни ведения журналов: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Также возможно настроить уровень ведения журналов для определенных
        # модулей, например
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # Для большинства файлов конфигурации из conf-available/,
        # которые включены или отключены на глобальном уровне, возможно
        # включить строку только для одного конкретного виртуального хоста. Например,
        # следующая строка включает конфигурацию CGI только для этого хоста
        # после того, как она была глобально отключена с помощью "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Файл конфигурации для моего домена под названием cihanbatasul.com.conf:

<VirtualHost *:80>
        # Директива ServerName устанавливает схему запроса, имя хоста и порт,
        # которые сервер использует для идентификации себя. Это используется при создании
        # URL-адресов переадресации. В контексте виртуальных хостов ServerName
        # указывает какое имя хоста должно быть в заголовке Host: запроса,
        # для совпадения с этим виртуальным хостом. Для виртуального хоста по умолчанию 
        # это значение не решающее, так как используется в качестве хоста последней инстанции.
        # Однако, вы должны задать это значение для любого другого виртуального хоста явно.
        ServerName cihanbatasul.com
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        <Directory /var/www/html>
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        # Доступные уровни ведения журналов: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Также возможно настроить уровень ведения журналов для определенных
        # модулей, например
        #LogLevel info ssl:warn
        Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
        <Location "/.well-known/acme-challenge/">
                Options None
                AllowOverride None
                ForceType text/plain
                RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
        </Location>

        # Для большинства файлов конфигурации из conf-available/,
        # которые включены или отключены на глобальном уровне, возможно
        # включить строку только для одного конкретного виртуального хоста. Например,
        # следующая строка включает конфигурацию CGI только для этого хоста
        # после того, как она была глобально отключена с помощью "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Я не уверен, правильно ли указал DocumentRoot. Я использовал структуру папок из моего дерева документов godaddy:
Ссылка на изображение структуры папок

У меня также нет файлов acme, и я не знаю, где их найти или как сделать их доступными.
Я был бы признателен за помощь.

Спасибо!

Ваш блок сервера неверен, для letsencrypt он должен выглядеть так:

<VirtualHost *:80>
  ServerName mydom.tld

  Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
  <Directory "/var/www/letsencrypt/.well-known/acme-challenge/">
      Options None
      AllowOverride None
      ForceType text/plain
      RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
  </Directory>

  # ... оставшаяся конфигурация
</VirtualHost>

Также убедитесь, что модуль ssl для apache включен

sudo a2enmod ssl

Что касается корня документа, рекомендуется, чтобы он выглядел так:


<VirtualHost *:80>
    ServerName yourdomain.com
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html>
        Options FollowSymLinks
        AllowOverride All
    </Directory>

    # Расположение вызова Let's Encrypt
    Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/

    <Location "/.well-known/acme-challenge/">
        Options None
        AllowOverride None
        ForceType text/plain
        RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
    </Location>
</VirtualHost>

Это должно быть сохранено в /etc/apache2/sites-available/yourdomain.conf

Убедитесь, что этот vhost включен и удалите остальные, которые были созданы ранее

.

Ответ или решение

Когда вы пытаетесь получить SSL-сертификат с помощью Certbot на сервере Ubuntu 22.04, базирующемся на GoDaddy, столкновение с ошибкой "unauthorized" может вызывать множество факторов. Давайте рассмотрим эту проблему подробно и шаг за шагом решим её.

Теория (Theory)

Ошибка "unauthorized" обычно возникает, когда служба автоматической проверки авторитета сертификатов, как Let’s Encrypt, не может подтвердить, что вы владеете доменом, на который вы пытаетесь получить сертификат. Самая распространённая причина – это неправильная конфигурация сервера или ошибки в DNS-записях.

Certbot использует HTTP-01 вызов, чтобы проверить владение доменом. Для этого, когда вы запускаете Certbot с флагом --apache, он временно изменяет конфигурацию Apache, чтобы создать специальный путь на вашем сервере (например, /.well-known/acme-challenge/). Затем он пытается получить доступ к этому пути, чтобы удостовериться, что сервер принадлежит вам.

Пример (Example)

В вашем случае было выявлено несколько потенциальных ошибок:

  1. Конфигурация VirtualHost: Ваши конфигурации 000-default.conf и cihanbatasul.com.conf должны быть тщательно настроены. Убедитесь, что для каждого VirtualHost явно указан ServerName.

  2. DNS настройки: Убедитесь, что ваш домен указывает на ваш сервер VPS. Выполните nslookup cihanbatasul.com или dig cihanbatasul.com для проверки.

  3. Доступность сервера: Проверьте, что ваш сервер доступен снаружи по IP-адресу. Используйте инструменты вроде curl http://cihanbatasul.com/.well-known/acme-challenge/test-file (временно создайте тестовый файл), чтобы убедиться, что файлы в этой директории доступны.

  4. Права доступа: Каталог, в который Certbot записывает файлы проверки (/.well-known/acme-challenge/), должен быть доступен для чтения веб-сервером Apache. Убедитесь, что соответствующие права установлены.

  5. Конфигурация Alias: В вашей конфигурации Apache проверьте, что путь Alias настроен корректно, и директория существует: /var/www/html/.well-known/acme-challenge/.

Применение (Application)

Теперь давайте применим знания и шаги для исправления ошибки.

  1. Настройка VirtualHost: Убедитесь, что конфигурация cihanbatasul.com.conf выглядит следующим образом:

    <VirtualHost *:80>
       ServerName cihanbatasul.com
       DocumentRoot /var/www/html
    
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
    
       <Directory /var/www/html>
           Options FollowSymLinks
           AllowOverride All
       </Directory>
    
       # Let's Encrypt challenge location
       Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
       <Location "/.well-known/acme-challenge/">
           Options None
           AllowOverride None
           ForceType text/plain
           RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
       </Location>
    </VirtualHost>

    Убедитесь, что эта конфигурация сохранена в /etc/apache2/sites-available/cihanbatasul.com.conf.

  2. Включите конфигурацию сайта: Выполните команду sudo a2ensite cihanbatasul.com.conf, чтобы включить сайт.

  3. Перезагрузите Apache: Примените изменения с помощью sudo systemctl restart apache2.

  4. DNS Проверка: Запустите команды nslookup и dig, чтобы убедиться, что домен указывает на правильный IP-адрес.

  5. Проверка доступа к серверу: Используйте команды curl или посетите URL напрямую в браузере (например, http://cihanbatasul.com/.well-known/acme-challenge/test-file), чтобы удостовериться, что файлы доступны.

  6. Проверьте SSL модуль: Выполните sudo a2enmod ssl, чтобы убедиться, что SSL модуль Apache включён.

  7. Проверка и попытка снова: После выполнения всех этих шагов попробуйте снова запустить certbot команду. Используйте флаг -v для более подробного логирования: sudo certbot --apache -v.

Эти шаги должны помочь вам устранить ошибку "unauthorized" и корректно настроить SSL-сертификат на вашем сервере. Если ошибка всё ещё сохраняется, рекомендуется просмотреть /var/log/letsencrypt/letsencrypt.log для поиска возможных подсказывающих сведений и, возможно, обратиться к сообществу Let’s Encrypt для дальнейшей помощи.

Оцените материал
Добавить комментарий

Капча загружается...