4

我正在尝试为单个域生成证书,但同时适用于 www 和非 www。

这就是我现在运行它的方式:

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

但我得到以下信息:

遇到虚拟主机歧义,但无法在非交互模式下请求用户指导。目前,Certbot 需要每个 vhost 都位于其自己的 conf 文件中,并且可能需要使用 ServerName 或 ServerAlias 目录显式标记 vhost。

所以我必须在没有 -n(--non-interactive) 的情况下运行它并选择正确的 vhost 文件。

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

4

3 回答 3

0

有许多可能导致此错误消息。这表明您的虚拟主机配置有问题。但总结一下最突出的原因:

  • <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仅获取配置文件中指定的所有域。提醒:请不要忘记service apache2 restart在每次更改 vhost 配置后重新启动或重新加载 apache

于 2017-06-12T23:34:31.417 回答
0

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 天,我什至因为尝试使用 certbot 太多次而被letsencrypt暂时禁止:(

于 2020-06-12T07:00:58.297 回答
0

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

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

关于 certbot 的 apache 模块可以可靠地对您的虚拟主机做的唯一事情是在单一 --domain情况下在全新安装上安装默认 SSL 虚拟主机。对于其他任何使用certonly选项,然后放入链接到生成的证书的虚拟主机,这很容易。证书的路径可以由第一个域参数的值或由参数​​指定的值可靠地确定--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
于 2021-04-02T07:53:50.753 回答