Let's Encrypt 证书问题:https://www.website.com 无法重定向到 https://website.com

Issue with Let's Encrypt certificate : https://www.website.com not working with redirection to https://website.com

我为网站生成的证书有问题(此处称为 website.com)。

我可以输入浏览器 http://www.website.com 并成功重定向到我想要的 https://website.com(使用 let's encrypt 生成的证书)。我已经用 Apache2 的重写规则完成了这个重定向。当我输入 http://website.com.

时,重定向到 https://website.com 也能正常工作

现在,当我直接在浏览器中输入时,我遇到了一个问题 https://wwww.website.com:我收到以下错误:

为了生成 let's encrypt 证书,我执行了以下命令:

./certbot-auto certonly --no-bootstrap --no-self-upgrade --renew-by-default -a standalone -d website.com --rsa-key-size 4096

我想生成一个同时适用于 website.comwww.website.com 的证书:上面带有 cerbot-auto 的命令是否正确?

似乎在我从 Debian 7 迁移到 Debian 10 之前,我在浏览器的证书信息 window 中有一个 *.website.com 名称,但我不确定。

如何输入 https://www.website.com and to be correctly redirected to https://website.com 而不会出现上图所示的错误?

更新 1

单个证书是否足以执行所有重定向,我的意思是在我的情况下只有一个证书 website.com?我之前的 OS 就是这种情况,我认为我只有一个 uniq 证书(对于 website.com)。

我想要以下重定向:

http://website.com -----> https://website.com

http://www.website.com -----> https://website.com

https://www.website.com -----> https://website.com

除了 URL 包含我想保持 HTTP 模式的目录 podcast

所以,从 Ref: Apache redirect www to non-www and HTTP to HTTPS,我做到了:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{REQUEST_URI} !^/podcast [NC]
RewriteRule ^ https://website.com%{REQUEST_URI} [L,NE,R=301]

这些重写规则是否正确?

不幸的是,如果我直接输入https://www.website.com,我不会被重定向到https://website.com,并且会出现上图警告window,我不知道该怎么办。

更新 2

1) Let's Encrypt 是否提供生成 "wildcards" 证书的可能性?,我的意思是在我们查看证书时以 *.website.com 形式在浏览器中。

2) 此外,有谁知道如何使用 apache2 执行重写规则允许重定向的规则 https://www.website.com to https://website.com.

为了获得更多信息,我开始赏金了。 在赏金的最后,我谈到了如何从 https://www.website.com to https://website.com 进行重定向(这些 URL 在相同的 href 标签下被屏蔽到赏金中,但它们是不同的)。

更新 3

感谢您的回答。我认为我的问题与通配符证书无关,因为我只想从 https://www.website.com to https://website.com 重定向( 不考虑上面的更新 2。当然,一个简单的重写规则应该够了。在我当前的 OS (Debian 10) 之前,我是 运行 我现在尝试再次使用的所有配置文件。特别是,我只使用了一个通过选项“-d website.com"(我没有使用第二个域“www.website.com”)。

我将尝试修改这些重写规则以获得此重定向,而无需生成 www.website.com 证书文件。

您可以尝试 运行对您的原始 certbot-auto 命令进行此次要更新以使您的证书包含额外的 www.website.com 域名 (我相信这就是约翰汉利在他对你原来问题的评论中所说的) 请注意,根据一个消息来源(下面的 letsencrypt 社区 link),如果您已经设置了 URL 重写规则,您可能必须删除它们,然后才能进行认证过程。 (如果你 运行 命令并得到一个错误,这可能就是原因)

./certbot-auto certonly --no-bootstrap --no-self-upgrade --renew-by-default -a standalone -d website.com -d www.website.com --rsa-key-size 4096

可能有用的参考文献:

certbot 的命令参数参考(手册页) https://certbot.eff.org/docs/man/certbot.html?highlight=bootstrap

letsencrypt 社区讨论添加新域 https://community.letsencrypt.org/t/add-a-domain-using-certbot-auto/33660

用于更新现有证书的 letsencrypt 文档 https://certbot.eff.org/docs/using.html#re-creating-and-updating-existing-certificates 请注意,根据手册页,--renew-by-default 暗示--expand,在这些示例中使用 (--expand 只是让您不必回答您是否有意更新现有证书)

我认为您的重写规则看起来基本没问题,如前所述,它可能需要暂时删除才能生成证书。在这些规则之前你可能需要 "RewriteEngine On":

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{REQUEST_URI} !^/podcast [NC]
RewriteRule ^ https://website.com%{REQUEST_URI} [L,NE,R=301]

关于通配符证书的问题,它们是受支持的,但仅在附加插件的帮助下。在这里查看更多: https://certbot.eff.org/docs/using.html?highlight=wildcard#id14

LetsEncrypt 提供通配符证书以执行*.website.com,但它们只能通过 DNS-01 级别挑战颁发。

您正在使用 HTTP 验证,上传特定文件以证明所有权,但这不足以证明您拥有整个域的所有权。

Certbot 对自动颁发通配符证书的支持有限,但如果您滚动到通配符部分,this 可能对您有用。它受限于您拥有的 OS + 服务器 + DNS 提供商。基本上,您需要能够通过您的注册商自动创建和修改 DNS TXT 记录。

我发现使用 acme.sh 项目颁发通配符证书更加灵活,并且可以与更多 DNS 提供商合作,尽管它更像是一个手动过程。

如果您的域的主要 DNS 提供商不受支持,您可以查看 "alias mode",您可以在其中使用受支持的另一个 DNS 提供商的子域或其他域作为您的代理域用于验证您拥有自己的主域。