【问题标题】:Apache wildcard SSL cert for wildcard vhost and specifically named vhost通配符虚拟主机的 Apache 通配符 SSL 证书,特别命名为虚拟主机
【发布时间】:2012-04-10 05:20:18
【问题描述】:

我们正在运行一个 PHP 站点,该站点为我们的客户使用自定义子域,因此我们在 Apache(版本 2.2.3)中实现了一个带有通配符 VHost 的通配符 SSL 证书。这些子域 PHP Web 应用程序还利用了一个 Pyramid Web 应用程序的反向代理,位于我们的 REST 和 RPC API 的两个 URL 前缀后面。

我们还有一个在 Pyramid 上运行的管理界面。我们通常会简单地将代理反向代理到管理界面,但我似乎无法为这两个虚拟主机使用通配符 SSL 证书。我做错了什么?

这是我们的虚拟主机配置:

NameVirtualHost *:443

<VirtualHost *:443>
    ServerName example.com
    ServerAlias *.example.com
    DocumentRoot /var/www/html/example/current/www
    ErrorLog logs/wild-example.com-SSL-error_log
    CustomLog logs/wild-example.com-SSL-access_log combined
    SSLEngine On
    SSLCertificateFile /etc/pki/tls/certs/star_example.com.2012.crt
    SSLCertificateKeyFile /etc/pki/tls/private/star_example.com.key
    SSLCACertificateFile /etc/pki/tls/certs/NetworkSolutions_CA.2012.crt
    <Directory /var/www/html/example/current/www>
        DirectoryIndex index.php
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    ProxyRequests On
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /restapi/ http://127.0.0.1:6543/restapi/
    ProxyPassReverse /restapi/ http://127.0.0.1:6543/restapi/
    ProxyPass /rpcapi/ http://127.0.0.1:6543/rpcapi/
    ProxyPassReverse /rpcapi/ http://127.0.0.1:6543/rpcapi/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    ServerAlias admin.example.com
    DocumentRoot /var/www/html/example/current/www
    ErrorLog logs/admin-example.com-SSL-error_log
    CustomLog logs/admin-example.com-SSL-access_log combined
    SSLEngine On
    SSLCertificateFile /etc/pki/tls/certs/star_example.com.2012.crt
    SSLCertificateKeyFile /etc/pki/tls/private/star_example.com.key
    SSLCACertificateFile /etc/pki/tls/certs/NetworkSolutions_CA.2012.crt
    <Directory /var/www/html/example/current/www>
        DirectoryIndex index.php
        Options FollowSymLinks
        AllowOverride All
    </Directory>

    ProxyRequests On
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://127.0.0.1:6542/
    ProxyPassReverse / http://127.0.0.1:6542/
</VirtualHost>

【问题讨论】:

  • 怎么不工作了?我从个人经验中知道,当您使用通配符时,Apache 对虚拟主机定义的顺序非常敏感。通配符通常应该在 .conf 加载层次结构中排在最后。

标签: php python ssl apache


【解决方案1】:

您是否在我们可以看到的 ssl_error 日志中收到错误消息?您应该能够只复制主虚拟主机并将其设置为特定的子域虚拟主机。

事实上,您原来的 *.example.com 内容应该只涵盖任何子域。我想如果你简单地将新的子域指定为常规端口 80 vhost,然后访问 https://admin.example.com 的站点,它应该受到保护。

【讨论】:

    【解决方案2】:

    删除以下行:

        ServerAlias *.example.com
    

    在第二个 VirtualHost 部分,更改 ServerName:

        ServerName admin.example.com
    

    拳头*。在第一个 VirtualHost 部分中捕获 admin.example.com。您也不希望它们都定义相同的 VirtualHost (example.com)。每个子域的 ServerName 需要不同。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 2012-06-08
      • 2017-05-28
      • 2014-12-28
      • 2016-11-05
      • 2019-09-12
      • 1970-01-01
      • 2013-01-27
      相关资源
      最近更新 更多