使用 SSL 的 Apache 名称虚拟主机

问题描述 投票:0回答:8

我正在尝试设置我们的服务器以允许通过 SSL 进行流量。我知道 SSL 不适用于名称虚拟主机,但我们所有的 Apache 服务器都位于具有专用私有 IP 的虚拟机上。我们有一个主虚拟机,它具有 mod_proxy 设置,可将流量路由到适当的虚拟机。

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

[警告]初始化:SSL 服务器 IP/端口冲突:

host1.example.com:443
(/etc/apache2/sites-enabled/host1:1) 与
host2.example.com:443
(/etc/apache2/sites-enabled/host2:1)

我们在代理上设置的每个主机都会出现以下错误消息之一。我们的代理虚拟主机设置如下:

<VirtualHost ipaddress:443>
    ServerName host1.example.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>

有什么办法可以让它发挥作用吗?

apache ssl ssl-certificate
8个回答
21
投票

听起来 Apache 正在警告您,您有多个具有相同 IP 地址和端口的

<VirtualHost>
部分...就让它在没有警告的情况下工作而言,我认为您需要使用诸如服务器名称指示(SNI ),一种识别作为 SSL 握手一部分请求的主机名的方法。基本上它可以让你通过 SSL 进行基于名称的虚拟主机,但我不确定浏览器对它的支持程度如何。除了 SNI 之类的内容之外,您向公共互联网公开的每个 IP 地址基本上只能使用一个启用 SSL 的域名。

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


7
投票

据我所知,Apache从2.2.12版本开始支持SNI 遗憾的是,文档尚未反映这一变化。

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


3
投票

您也许可以更换:

VirtualHost ipaddress:443

VirtualHost *:443

您可能需要在所有虚拟主机上执行此操作。

它可能会清除该消息。让 ServerName 指令负责路由消息请求。

再次强调,如果同一台机器有多个 ip 别名,则可能无法执行此操作。


2
投票

虚拟主机看起来像这样:

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 [email protected]
    DocumentRoot /var/www/html
    ServerName www.example.com
    ErrorLog logs/www.example.com-error_log
    CustomLog logs/www.example.com-access_log common
</VirtualHost>

1
投票

首先您需要在配置文件中添加 NameVirtualHost ip:443! 您可能有一个结尾为 80 的,但您还需要一个结尾为 443 的。

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

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


1
投票

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

NameVirtualHost
功能。

NameVirtualHost IP_Address:443

0
投票

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

来源:Apache 2.2 SSL FAQ 为什么无法使用基于名称的虚拟主机来识别不同的 SSL 虚拟主机?

与 SSL 不同,TLS 规范允许基于名称的主机(其他人提到的 SNI),但 Apache 尚不支持此功能。当针对 openssl 0.9.8 编译时,它应该会出现在未来版本中。

另外,mod_gnutls声称支持SNI,但我从未真正尝试过。


0
投票

我创建了

/var/www/sponsorship.jaimemontoya.net
来包含我想要显示的内容。然后我用以下内容创建了
/etc/apache2/sites-available/sponsorship.jaimemontoya.net-le-ssl.conf

<IfModule mod_ssl.c>
  <VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName sponsorship.jaimemontoya.net
    ServerAlias www.sponsorship.jaimemontoya.net
    DocumentRoot /var/www/sponsorship.jaimemontoya.net
    ErrorLog /error.log
    CustomLog /access.log combined
  </VirtualHost>
</IfModule>

我使用

a2ensite sponsorship.jaimemontoya.net-le-ssl.conf
启用了该站点,之后,我使用
systemctl reload apache2
激活了新配置。这对我有用。我希望它有帮助。

我在 https://jaimemontoya.com/blog/2023/11/17/13/08/发布了此解决方案,并附有一些屏幕截图和额外详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.