我在 上托管了一个网站*.mydomain.com
,我的 Apache 网络服务器与 PHP 结合将根据提供的子域返回/回显一些纯文本。*.mydomain.com
使用通配符 SSL 证书进行保护。
我需要允许用户将请求从他们自己的域重定向到我的域,例如demo.theirdomain.com
:demo.mydomain.com
我已经使用 CNAME 记录通过 HTTP 实现了这一点,但是我读到过这并不理想。我需要通过 HTTPS 为我的网站提供服务。当我尝试通过 HTTPS 连接到网站时,https://demo.theirdomain.com
我会收到证书不匹配错误。
允许其他子域安全地将其请求重定向到我的域的最佳方法是什么?注意:我不希望用户创建自己的证书。
答案1
不幸的是,在这种情况下,CNAME 不起作用。正如您所说,您的证书仅对其他域有效,*.mydomain.com
并且不适用于任何其他域。使用来自demo.theirdomain.com
到的CNAMEmydomain.com
将导致证书不匹配错误,因为客户端被引导相信它正在连接到,demo.theirdomain.com
但服务器(mydomain.com
)正在为*.mydomain.com
您需要重新考虑尝试执行此操作的方式。我建议您详细说明您这样做的原因,以便我们避免 XY 问题,但我将继续提供两种可能的解决方案:
- 另一个域需要使用重定向,例如 HTTP 302。Web 服务器将位于
demo.theirdomain.com
并提供 302 的 HTTP 响应以将客户端重定向到mydomain.com
。这将允许客户端意识到当前服务器是服务器mydomain.com
,并且证书*.mydomain.com
对其有效。如果这不是理想的选择,因为您希望demo.theirdomain.com
成为唯一可见的域,请尝试 #2。然而,此重定向可能是您的最佳解决方案。 - 反向代理可以位于
demo.theirdomain.com
并提供 的直通/后端mydomain.com
。这样做的好处是反向代理将处理证书转换,因为连接终止于demo.mydomain.com
,因此那里的证书(希望配置正确)有效。在反向代理处发起到 的新连接,mydomain.com
并被视为有效。您说过您不希望用户创建自己的证书,因此此解决方案可能不适合您,特别是因为它还涉及反向代理设置(尽管他们可以配置 DNS 条目以demo.theirdomain.com
指向您的反向代理上的 IP)。
您可以为他们的域名提供证书,但这听起来对您来说并不可行。我建议尽可能不要使用通配符证书,因为它们不是好的安全做法。
答案2
如果您的用户想要将其域重定向https://demo.example.net
到您的域,https://demo.example.com
则只有两种配置可供选择:
- 他们运行具有有效证书的 TLS Web 服务器,该服务器将所有内容重定向(使用 HTTP 重定向)到
demo.example.com
, - 您使用有效证书运行
VirtualHost
命名demo.example.net
。在这种情况下,您可以摆脱重定向并直接提供内容。
无论如何,他们都必须获得有效的证书demo.example.com
,但如果你使用让我们加密证书。在这种情况下:
- 客户只需授权您
demo.example.net
按照以下方式使用域名Let's Encrypt 服务条款,值得注意的是你必须满足条件:您向 ISRG 和广大公众保证,您是该互联网域名的合法注册人,该域名是或将成为您证书的主题,或者您是该注册人的正式授权代理人。
- 要获得这样的证书,你只需要
demo.example.net
指向你的地址(已经完成)并使用 ACME 客户端,例如certbot获取和更新证书。