SNI动态证书

时间:2017-12-20 03:12:36

标签: apache ssl dynamic ssl-certificate sni

我正把头发拉出来。 像wix.comsquarespace.com等网站;可以动态生成网站,并且仍然在数百万个自定义域中的每一个上使用SSL。

我尝试做同样的事情,但我无法弄清楚他们是如何做到的?

逻辑解决方案将在Apache上:

<IfModule mod_ssl.c>
            <VirtualHost *:443>
                    ServerAlias *
                    UseCanonicalName Off

                    DocumentRoot /var/www/html

                    SSLEngine on
                    SSLCertificateFile /etc/apache2/ssl/%0/server.crt
                    SSLCertificateKeyFile /etc/apache2/ssl/%0/server.key
            </VirtualHost></IfModule>

但是当我重新启动apache时出现错误: SSLCertificateFile:文件'/etc/apache2/ssl/%0/server.crt'不存在或为空

即使我创建了一个虚拟文件夹/ ssl /%0 /带有一些虚拟证书......它仍然使用(错误的)虚拟证书。

我知道有些人会在他们的高马上大喊大叫,你不能在TLS握手之前解析服务器名称。 但是根据这个post和其他:{0}可以用mod_vhost_alias来解决,因为服务器名称是用SNI发送的......

我知道这样做有效:第二种方法是为每个自定义域创建虚拟主机:

  <VirtualHost *:443>
                    ServerName site111.ca
                    ServerAlias www.site111.ca

                    DocumentRoot /var/www/html

                    SSLEngine on
                    SSLCertificateFile "/var/app/s3/ssl/site111.ca/certificate.crt"
                    SSLCertificateKeyFile "/var/app/s3/ssl/site111.ca/certificate.key"
                    SSLCertificateChainFile "/var/app/s3/ssl/site111.ca/certificate.chain"
            </VirtualHost><VirtualHost *:443>
     ServerName site222.ca
         ServerAlias www.site222.ca
     DocumentRoot /var/www/html

      SSLEngine on
      SSLCertificateFile "/var/app/s3/ssl/site222.ca/certificate.crt"
      SSLCertificateKeyFile "/var/app/s3/ssl/site222.ca/certificate.key"
      SSLCertificateChainFile "/var/app/s3/ssl/site222.ca/certificate.chain"

我可以创建一个脏系统,每个新域添加一个虚拟主机,每天重新加载apache Eeewwww ......再次:Apache将虚拟主机的数量限制为256:/

他们是怎么做到的??还有其他技术可以帮助我吗? Nginx,Nodejs? 谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

TL; DR :他们使用通配符证书。因此问题在证书级别和服务器配置级别得到解决,而不仅仅是在您尝试的服务器配置级别。

几点:

  • The logical solution - 我几乎没有在计算机科学或软件工程中看到任何“合乎逻辑”的东西。这是工程,而不是数学,你必须做的东西,而不是思考的东西。因此,在很多情况下(不是全部),知识变得比情报更重要。

  • 您对SNI有一个正确的观点 - 它是主机识别机制向TCP / SSL层的推迟(在HTTP标头可用之前的HTTP之前)。

  • virtualhost for every custom domain - 根据我们所说的规模,它可以发挥作用。但是,如果您在客户端上安装了200,1000,5000个子域。那么呢?

  • How do they do it - 让我举一些示例:像Cloudflare这样的HTTP代理为您生成免费证书,您必须在服务器上添加(PROXY-&gt; ORIGIN ecryption)和END_USER - &gt; CLOUDFLARE连接使用通配符证书加密。这些是他们为我发出的通配符证书的DNS名称:

缩写:

DNS Name=sni178747.cloudflaressl.com
DNS Name=*.9992924.com
DNS Name=*.apum.de
DNS Name=*.arbomedia.net
DNS Name=*.australiacasinobonus.net
DNS Name=*.auto-lpg.de
DNS Name=*.autoprof.de
DNS Name=*.circuitodesafio.com.br
DNS Name=*.data--center.info
DNS Name=*.devclub.com
DNS Name=*.eissportanlagen.de
DNS Name=*.entrepreneur-hebdo.fr
DNS Name=*.environmentalbrasil.com.br
DNS Name=*.gofitnessplan.fr
DNS Name=*.golfinterieur.info
DNS Name=*.greenbuch.cf
DNS Name=*.mindaugas.cf
DNS Name=*.mp3fdm.trade
DNS Name=*.mp3freedom.info
DNS Name=*.mp3star.cricket
DNS Name=environmentalbrasil.com.br
DNS Name=gofitnessplan.fr
DNS Name=golfinterieur.info
DNS Name=greenbuch.cf
DNS Name=mindaugas.cf
DNS Name=mp3fdm.trade
DNS Name=mp3freedom.info
DNS Name=mp3star.cricket
DNS Name=preussische-geschichte.de
  • 这种服务器的配置如何?它实际上是一个服务器场,在负载均衡器下,w /资源共享(单独调整的机器上的静态资源w /缓存)。每个服务器上有多个虚拟主机/域/主机别名,但对于其中许多服务器只有1个SSL文件(或全部,具体取决于规模)。这些域可以具有专用配置,如果它们的配置相同,则可以将它们组合在一起。

  • 关于网络服务器的建议 - 除非有充分理由使用APACHE,否则我不会使用它。 nginx有吸引力和受欢迎程度的原因。

答案 1 :(得分:0)

  

我尝试做同样的事情,但我无法弄清楚他们是怎么做到的!?

要动态生成SSL网站,他们会使用Letsencrypt证书颁发机构,因为您可以自行检查(例如:CN = www.thefoodmarketchiswick.com)。但对于以.wix.com名称托管的网站,他们只是使用通配符证书(CN = * .wix.com)。直到那时,很容易。

第二个问题,正如您所提到的,Apache无法处理这种大规模托管(并且没有人相信您可以在一台服务器上托管数百万个应用程序)。看看这个Netcraft Survey,它提供了一些线索。我无法为他们回答,但运行openssl s_client会导致错误,这意味着他们没有做出非常合规的事情。