Certbot www和非www与--non-interactive = vhost歧义

时间:2017-06-08 22:20:11

标签: ssl ssl-certificate lets-encrypt certbot

我正在尝试为单个域生成证书,但同时为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 个答案:

答案 0 :(得分:0)

有许多可能导致此错误消息。它表示您的vhost配置有问题。 但总结一下最突出的原因:

  • 您在一个<VirtualHost >文件中有多个.conf
  • 您有多个.conf个文件,例如端口80和443,它们没有完全相同的ServerName和/或ServerAlias属性
  • 您未在ServerName档案中指定任何.conf
  • 您的domain.tld文件中未指定
  • www.domain.tld和/或.conf

此外,我建议您使用--dry-run选项运行certbot进行调试。此外,对于cron中的自动续订,有/etc/certbot-auto renew
因此,您可以尝试/etc/certbot-auto renew --dry-run来获取配置文件中指定的所有域。 提醒:请不要忘记在vhost配置中每次更改后重新启动或重新加载service apache2 restart或类似的apache

答案 1 :(得分:0)

certbot需要您正确配置虚拟主机。您需要编辑apache2配置文件,以使www.domain.comdomain.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天,甚至我因尝试使用certbot太多次而被Letencrypt暂时禁止:(

答案 2 :(得分:0)

<块引用>

有什么方法可以在没有任何提示的情况下为 www 和非 www 生成证书吗?

不,目前有not。如果您有复杂的虚拟主机,我不会相信 certbot 能够正确管理它们。这只是感觉不可靠,事实证明,至少目前在实践中是不可靠的。

关于 certbot 的 apache 模块可以可靠地为您的虚拟主机做的唯一一件事是在 single --domain 情况下在全新安装时安装默认 SSL 虚拟主机。对于其他任何使用 certonly 选项,然后放入链接到生成的证书的虚拟主机,这很容易。证书的路径可以由 first 域参数的值或由 --cert-name 参数指定的值可靠地确定。所以:

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

然后放入链接到证书路径的虚拟主机。示例默认 SSL 虚拟主机 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