HTTPS从根域(即apex或';裸';)重定向到';www';没有浏览器弹出的子域?

HTTPS从根域(即apex或';裸';)重定向到';www';没有浏览器弹出的子域?,https,Https,DNS A记录要求将IP地址硬编码到应用程序的DNS配置中 ......这。Heroku建议两种解决方法: …在apex使用支持类似CNAME功能的DNS提供程序,并使用子域重定向` 我的问题围绕后一个选项(因为DreamHost AFAIK不支持前者): 是否可以将HTTPS请求从根域(即apex或“裸域”)重定向到“www”子域,而无需浏览器弹出? 赫罗库认为不是: …需要SSL加密的应用程序应在根域上使用别名/ANAME配置。当通过SSL(即)请求根域时,子域重定向将导致浏览器错误 …但我

DNS A记录要求将IP地址硬编码到应用程序的DNS配置中

......这。Heroku建议两种解决方法:

…在apex使用支持类似CNAME功能的DNS提供程序,并使用子域重定向`

我的问题围绕后一个选项(因为DreamHost AFAIK不支持前者):

是否可以将HTTPS请求从根域(即apex或“裸域”)重定向到“www”子域,而无需浏览器弹出?

赫罗库认为不是:

…需要SSL加密的应用程序应在根域上使用别名/ANAME配置。当通过SSL(即)请求根域时,子域重定向将导致浏览器错误

…但我希望这是一个不完整(或不正确)的陈述

澄清更新: 从apex重定向到“www”的真正问题是键入
https://example.com
直接进入浏览器将发出证书警告。当然,这是一个边缘案例,但不是一个小案例

解决方案更新: 我用计算机解决了这个问题。(甚至不需要转移我的域名!)


<> P>我相信EasyDNS提供了类似的特性,但惊奇地发现大多数其他域名托管公司都没有。

< P>有两个独立但相互依存的间接考虑级别。第一个是DNS名称最终解析为什么IP地址。第二个是该IP地址上的服务器的功能

请记住,在浏览器中键入URL时,首先发生的是DNS查找。通常,这是由操作系统处理的,而不是浏览器本身

因此,您的浏览器将询问操作系统,“example.com的地址是什么?”操作系统将查找记录,如果它得到
CNAME
,将查找该记录,直到找到
a
记录。然后,操作系统对浏览器做出响应并给出答案

然后,浏览器打开到该IP地址的TCP连接:

  • 如果是http://URL,它将连接到端口80,然后发出http请求
  • 如果https://URL连接到端口443,建立TLS/SSL连接(这意味着验证证书),然后通过安全通道发出HTTP请求
只有在这一点上才能发生HTTP重定向。浏览器发送一个请求(
GET/
),服务器可以用301响应任何其他URL

请理解,注册商提供的“子域重定向”服务只不过是一个发出301s的常规HTTP服务器。当您选择注册商的重定向选项时,他们只需将域顶点的
a
记录设置为他们控制的服务器,该服务器告诉浏览器转到www.example.com

由于大多数注册商不允许您将SSL证书上载到其重定向服务器,浏览器无法建立到服务器的必要安全连接,因此他们从不发出HTTP请求。因此,https请求​://example.com失败了

那么,为什么你不能直接
CNAME
apex呢

域系统使用规范名称提供这样的功能 (
CNAME
)RR[记录资源]。
CNAME
RR将其所有者名称标识为别名,并且 在文件的
RDATA
部分中指定相应的规范名称 RR.如果节点上存在
CNAME
RR,则不应显示其他数据 呈现
;这确保了规范名称及其别名的数据 不能不同。此规则还确保缓存的
CNAME
可以 在未与权威服务器检查其他RR类型的情况下使用

规范要求
CNAME
记录是给定(子)域的唯一记录。这与在顶点上有
SOA
记录的要求不一致。(有一些人试图更改规范,以允许
CNAME
SOA
共存,但仍有许多断开的SMTP实现会被域上的
CNAME
混淆。)

您可以使用以下选项使SSL在apex上工作:

  • 请使用在重定向服务器上支持SSL的第三方服务。您可能会为此付费。我不会推荐此路由,因为它会让您失去对可靠性的控制,并要求您将SSL证书的密钥交给可能值得信任或不值得信任的人
  • 运行您自己的重定向服务器。由于apex需要一个
    A
    记录,因此您需要一个静态IP,而Heroku和AWS的ELB等服务不提供静态IP。因此,如果您处于云环境中,则很难(如果不是不可能)保证可靠性。另一方面,您可以保留对SSL密钥的控制
  • 使用允许您设置别名的DNS主机。将别名指向您的Heroku域/ELB/无论什么。这很可能是最好的选择
从技术上讲,别名不是DNS记录的一种类型。相反,它是DNS主机端的一种特殊配置,从另一次查找的结果中返回
a
记录。换句话说:

  • 您的操作系统向您的DNS主机发出例如.com的DNS请求
  • 您的DNS主机读取内部别名配置,并发出该域的DNS请求。因此,如果您设置了别名,例如.herokuapp.com,它将查找该域的
    a
    记录
  • DNS主机返回一个简单的
    记录,其中包含它从别名查找中获得的IP
  • 通过别名记录,您可以将apex指向您的www域
    CNAME
    d所指向的同一个云负载平衡器。假设您已在www域上设置SSL,则裸域将