我想设置新的子域容易(至less在开发方面),并获得一个通配符证书,设置通配符dns(这是做的和伟大的),并设置SNI(服务器名称指示)似乎是会为我们的HTTPStesting工作,但Googlesearch,我还没有find任何好的指示。 这甚至有可能吗? 我所读到的关于SNI的一切都表明,您需要为每个站点设置一个证书,并且SNI可以根据主机名称提供不同的证书。
如果您拥有通配符证书,则可以执行基于命名的虚拟主机,就像不使用SSL一样。
在协商SSL连接时,您的Web服务器需要在收到任何http协议头之前select证书 – 这意味着,如果没有SNI,Apache将无法在多个基于名称的虚拟主机之间进行select。 这就是为什么在过去,您需要为系统上托pipe的每个虚拟主机分配一个IP地址。 使用SNI,客户端能够向服务器提供其希望连接的主机的名称。 这允许服务器select适当的虚拟主机configuration,并因此select适当的证书。
如果您使用的是通配符证书,只要所有虚拟主机共享一个共同的父域,就可以回避这个问题。 在这种情况下,SNI是不必要的。 由于证书对任何主机都有效,因此不要求Web服务器能够在SSL协商开始时识别相应的虚拟主机,这意味着您可以使用HTTP标头来标识主机,继续使用正常名称的虚拟主机。
使用Apache,你的configuration看起来像这样:
NameVirtualHost *:443 <VirtualHost *:443> ServerName foo.example.com DocumentRoot /sites/foo.example.com/html SSLEngine On # ...other SSL parameters... </VirtualHost> <VirtualHost *:443> ServerName bar.example.com DocumentRoot /sites/bar.example.com/html SSLEngine On # ...other SSL parameters... </VirtualHost>
几年来,我们一直在生产环境中运行这种configuration,没有任何问题。