apache - SNI 动态证书

标签 apache ssl dynamic ssl-certificate sni

我在这里拉扯我的头发。 像 wix.com 这样的网站, squarespace.com ...ETC;可以即时生成网站,并且仍然在数百万自定义域中的每一个上使用 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: file '/etc/apache2/ssl/%0/server.crt' does not exist or is empty

即使我创建了一个带有一些虚拟证书的虚拟文件夹/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,节点? 感谢您的宝贵时间。

最佳答案

I try to do the same thing, but I can't figure out how they do it!?

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

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

关于apache - SNI 动态证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47898255/

相关文章:

python - 使用 Xampp 运行 Python 脚本

Java:来自同一 HTTPClient 的多个 HTTP 请求?

php - 为什么在使用 Apache 时没有定义 PHP 的 STDIN?

c# - 什么时候应该在 C# 4.0 中使用动态关键字?

excel - Python - XlsxWriter : Referring to columns by column name, 不是列字母(硬编码与动态变量)

php - joomla BASE HREF 使用 HTTP 而不是 HTTPS

security - API 安全 - 发送 CC 信息

php - 确保仅预授权个人访问应用程序

ssl - F# 使用隐式 SSL 通过 FTP 下载文本文件

javascript - 获取多个输入字段的平均值(范围)