Certbot www и non-www с --non-interactive = vhost неоднозначность

Я пытаюсь сгенерировать сертификат для одного домена, но для www и не www.

Вот как я запускаю это сейчас:

certbot --apache -n -d domain.tld -d www.domain.tld --agree-tos --email mail@domain.com --redirect

Но я получаю следующее:

Обнаружена неоднозначность vhost, но невозможно запросить руководство пользователя в неинтерактивном режиме. В настоящее время Certbot требует, чтобы каждый vhost был в своем собственном файле conf, и может потребоваться, чтобы vhosts были явно помечены каталогами ServerName или ServerAlias.

Поэтому я должен запустить его без -n (- неинтерактивно) и выбрать правильный файл vhost.

Можно ли как-нибудь сгенерировать сертификат для www и не www без каких-либо подсказок?

3 ответа

Есть много возможностей, которые могут вызвать это сообщение об ошибке. Это указывает на то, что с вашей конфигурацией vhost что-то не так. Но суммируем наиболее выдающиеся причины:

  • У вас есть несколько <VirtualHost > в одном .conf файл
  • У вас есть несколько .conf файлы, например, для портов 80 и 443, которые не совпадают ServerName и / или ServerAlias атрибуты
  • Вы не указали ни одного ServerName вообще в .conf файл
  • domain.tld и / или www.domain.tld не указаны в вашем .conf файлы

Кроме того, я рекомендую вам запустить certbot с --dry-run вариант для отладки. Кроме того, для автоматического обновления в cron есть /etc/certbot-auto renew
Итак, вы можете попробовать /etc/certbot-auto renew --dry-run просто взять все домены, указанные в файлах конфигурации. Напоминание: пожалуйста, не забудьте также перезапустить или перезагрузить Apache с service apache2 restart или подобное после каждого изменения в конфиге vhost

Certbot требует от вас правильной настройки виртуальных хостов. Вам нужно отредактировать файл конфигурации apache2, чтобыwww.domain.com это псевдоним для domain.com

[вам необходимо отредактировать соответствующие файлы конфигурации в соответствии с настройками вашего сервера]

например мой сервер такой

/etc/apache2/sites-available/domain.com.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot /var/www/domain.com
    ErrorLog /error.log
    CustomLog /access.log combined
</VirtualHost>

Затем снова запустите certbot

sudo certbot  --noninteractive --agree-tos  --no-eff-email  --cert-name domain.com --apache --no-redirect  -d domain.com -d www.domain.com -m siteadminsemail@gmail.com

Надеюсь, это кому-то поможет, меня это мучило 2 дня, и я даже был временно забанен letsencrypt за слишком много попыток использовать certbot:(

Есть ли способ создать сертификат для www и без www без каких-либо подсказок?

Нет, на данный момент нет. Если у вас сложные виртуальные хосты, я бы не стал доверять certbot их правильное управление. Это просто кажется ненадежным, и оказывается, по крайней мере, в настоящее время это ненадежно на практике.

Единственное, что модуль apache certbot может надежно сделать с вашими виртуальными хостами, — это установить виртуальный хост SSL по умолчанию при новой установке в одном --domainкейс. Для чего-либо еще использовать certonlyвариант, а затем добавьте ссылки на свои виртуальные хосты на сгенерированные сертификаты, что очень просто. Путь к сертификату можно надежно определить по значению первого параметра домена или как указано в --cert-nameаргумент. Так:

      certbot certonly --apache -n --domains domain.tld,www.domain.tld --agree-tos --email mail@domain.com

Затем добавьте виртуальный хост, ссылающийся на путь сертификатов. Пример SSL vhost по умолчанию 000-default-ssl.conf:

      <IfModule mod_ssl.c>
  <VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    # LogLevel info ssl:warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    # ServerName not required for default.
    SSLCertificateFile /etc/letsencrypt/live/domain.tld/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
  </VirtualHost>
</IfModule>

Затем перезагрузите:

      a2ensite 000-default-ssl.conf
service apache2 reload
Другие вопросы по тегам