apache “加密证书”的问题:https://www.example.com无法重定向到https://example.com

nwwlzxa7  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(266)

我有一个问题的证书,我已经生成了一个网站(在这里称为example.com)。
我可以在浏览器中输入http://www.example.com并成功地重定向到https://example.com(使用let's encrypt生成的证书)。我已经使用Apache2的重写规则完成了此重定向。当我输入http://example.com时,重定向到https://example.com也工作正常。
现在,当我直接在浏览器https://wwww.example.com中键入时,我面临一个问题:出现以下错误:

为了生成让我们加密的证书,我执行了以下命令:
./certbot-auto certonly --no-bootstrap --no-self-upgrade --renew-by-default -a standalone -d example.com --rsa-key-size 4096
我想生成一个同时适用于example.comwww.example.com的证书:上面的cerbot-auto命令是否正确?
似乎在我从Debian 7迁移到Debian 10之前,我在浏览器的证书信息窗口中有一个*.example.com名称,但我不确定。
如何键入https://www.example.com并正确地重定向到https://example.com而不出现上图所示的错误?

更新1

一个证书是否足以使所有的重定向被执行,我的意思是在我的情况下只有一个证书example.com?这是在我以前的操作系统的情况下,我认为我只有一个唯一的证书(example.com).
我希望有以下重定向:

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

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

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

但包含目录podcast的URL除外,我希望在该目录中保持HTTP模式。
因此,从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://example.com%{REQUEST_URI} [L,NE,R=301]

这些重写规则看起来是否正确?
不幸的是,如果我直接键入https://www.example.com,我不会被重定向到https://example.com,并出现上面的警告窗口图,我不知道该怎么办。

更新2

**1)**Let's Encrypt是否提供生成“通配符”证书的可能性?我的意思是,当我们在浏览器中查看证书时,可以使用*.example.com
**2)**此外,是否有人知道如何执行Apache2重写规则,该规则允许将https://www.example.com重定向到https://example.com

为了获得更多的信息,我开始了一个bounty。在bounty的结尾,我会讨论如何从https://www.example.com重定向到https://example.com(这些URL在bounty中被屏蔽在相同的href标签下,但它们是不同的)。

更新3

我想我的问题与通配符证书无关,因为我只想从https://www.example.com重定向到https://example.com不要考虑上面的UPDATE 2。当然一个简单的重写规则就足够了。在我现在的操作系统(Debian 10)之前,我运行得很好,我现在尝试再次使用所有的配置文件。特别是,我只使用了一个通过选项“-d example.com“生成的证书(我没有使用第二个域“www.example.com“)。
我将尝试修改这些重写规则以获得此重定向,而不必生成www.example.com证书文件。

ffdz8vbo

ffdz8vbo1#

您可以尝试对原始certbot-auto命令运行此次要更新,以使您的证书包含附加的www.example.com域名(我相信这就是约翰·汉利在他对你最初问题的评论中所说的)请注意,根据一个消息来源(让我们加密下面社区链接)如果您已经设置了URL重写规则,(如果您运行该命令并得到一个错误,这可能就是原因)

./certbot-auto certonly --no-bootstrap --no-self-upgrade --renew-by-default -a standalone -d example.com -d www.example.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 documentation for update an existing certificate 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://example.com%{REQUEST_URI} [L,NE,R=301]

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

pdkcd3nj

pdkcd3nj2#

LetsEncrypt提供通配符证书以执行*.example.com,但它们只能通过DNS-01级别的质询颁发。
您正在使用HTTP验证,即上传特定文件以证明所有权,但这不足以证明您拥有整个域的所有权。
Certbot对自动发行通配符证书的支持有限,但如果您滚动到通配符部分,this可能会对您有用。它受您拥有的OS +服务器+ DNS提供商的限制。基本上,您需要能够自动创建和修改与您的注册商的DNS TXT记录。
我发现使用acme.sh项目来颁发通配符证书要灵活得多,并且可以与更多的DNS提供商一起工作,尽管这是一个手动过程。
如果您的域的主DNS提供商不受支持,您可以查看“别名模式”,在该模式下,您可以使用其他DNS提供商支持的子域或其他域作为您的代理域来验证您是否拥有主域。

相关问题