用于通配符vhost的Apache通配符SSL证书,特别命名为vhost

时间:2012-04-10 05:20:18

标签: php python ssl apache

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

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

这是我们的vhost配置:

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>

2 个答案:

答案 0 :(得分:0)

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

事实上,您原来的* .example.com事情应该只涵盖任何子域名。我想如果您只是将新子域指定为常规端口80 vhost,然后访问https://admin.example.com处的网站,则应受到保护。

答案 1 :(得分:0)

删除以下行:

    ServerAlias *.example.com

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

    ServerName admin.example.com

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