首页 文章

带有SSL的Apache名称虚拟主机

提问于
浏览
36

我正在尝试设置我们的服务器以允许通过SSL进行流量 . 我知道SSL不适用于Name Virtual Host,但是我们在具有专用私有IP的虚拟机上拥有所有apache服务器 . 我们有一个主虚拟机,它具有mod_proxy设置,可以将流量路由到适当的vms .

但是,为了路由https流量,我们需要在代理和vms上安装证书 . 我们有一个可以在所有主机上使用的通配符证书 . 一切似乎都正常工作,但我在代理的apache日志中收到以下内容:

[警告]初始化:SSL服务器IP /端口冲突:host1.domain.com:443(/ etc / apache2 / sites-enabled / host1:1)与host2.domain.com:443(/ etc / apache2 / sites-启用/主机2:1)

我们在代理上设置的每个主机都有一条错误消息 . 我们的代理虚拟主机设置如下:

<VirtualHost ipaddress:443>
    ServerName host1.domain.com
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / https://privateip:443/
    ProxyPassReverse / https://privateip:443/

    SSLProxyEngine on
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>

有什么方法可以让这个工作吗?

7 回答

  • 3

    听起来Apache警告你有多个具有相同IP地址和端口的 <VirtualHost> 部分......只要让它在没有警告的情况下工作,我想你需要使用像服务器名称指示(SNI)这样的东西,识别作为SSL握手一部分请求的主机名的方法 . 基本上,它允许您通过SSL进行基于名称的虚拟主机,但我支持浏览器 . 除了像SNI这样的东西,你基本上只限于一个支持SSL的域名,用于你公开上网的每个IP地址 .

    当然,如果您能够正确访问网站,您可能会忽略警告 . 这些特别的不是很严重 - 它们主要表明如果遇到问题需要注意什么

  • 0

    据我所知,自2.2.12版以来,Apache支持SNI . 遗憾的是,文档尚未反映出这种变化 .

    转到http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI直到完成

  • 1

    您可能可以替换:

    VirtualHost ipaddress:443
    

    VirtualHost *:443
    

    您可能需要在所有virt主机上执行此操作 .

    它可能会清除这条消息 . 让ServerName指令担心路由消息请求 .

    同样,如果您在同一台计算机上有多个ip别名,则可能无法执行此操作 .

  • 2

    VirtualHost看起来像这样:

    NameVirtualHost IP_Address:443
    
    <VirtualHost IP_Address:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/ca.crt    # Where "ca" is the name of the Certificate
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key
        ServerAdmin webmaster@domain_name.com
        DocumentRoot /var/www/html
        ServerName www.domain_name.com
        ErrorLog logs/www.domain_name.com-error_log
        CustomLog logs/www.domain_name.com-access_log common
    </VirtualHost>
    
  • 1

    Apache不支持基于名称的虚拟主机上的SSL,仅支持基于IP的虚拟主机 .

    来源:Apache 2.2 SSL常见问题Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?

    与SSL不同,TLS规范允许基于名称的主机(其他人提到的SNI),但Apache尚不支持此功能 . 据推测,它将在未来版本中针对openssl 0.9.8进行编译 .

    此外,mod_gnutls声称支持SNI,但我从未尝试过 .

  • 7

    首先,你需要在配置文件中使用NameVirtualHost ip:443!你可能最后有一个80,但你也需要一个443 .

    其次你需要* .domain证书(通配符)(可以制作一个)

    第三,你只能在一个ip中创建something.domain web(因为证书)

  • 21

    您必须添加以下部分以启用给定IP的 NameVirtualHost 功能 .

    NameVirtualHost IP_Address:443
    

相关问题