SNI动态证书

Fry*_*wow 11 apache ssl dynamic ssl-certificate sni

我把头发拉到这里.像wix.com,squarespace.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>
Run Code Online (Sandbox Code Playgroud)

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

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

我知道有些人会在他们的高马上大喊大叫,你不能在TLS握手之前解析服务器名称.但根据这篇文章和其他文章:%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"
Run Code Online (Sandbox Code Playgroud)

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

他们是如何做到的呢!?还有其他技术可以帮助我吗?Nginx,Nodejs?感谢您的时间.

Eug*_*ell 1

我尝试做同样的事情,但我不明白他们是如何做到的!?

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

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