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