使用 SSL 的 Apache 名称虚拟主机 [已关闭]

Apache Name Virtual Host with SSL [closed]

提问人:JamesArmes 提问时间:2/6/2009 最后编辑:Stephen OstermillerJamesArmes 更新时间:11/19/2023 访问量:110141

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

6天前关闭。

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

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

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

对于我们在代理上设置的每个主机,都有一个这样的错误消息。我们的代理虚拟主机设置发布如下:

<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证书

评论

0赞 jdavid.net 1/25/2013
确保使用正确的方法生成证书,否则它将在某些浏览器中工作,而不是在IE中工作Common Name
1赞 Stephen Ostermiller 11/18/2023
我投票决定结束这个问题,因为它不是一个编程问题。有关管理服务器的问题可以在服务器故障中提出。将来,请在那里提出这样的问题。
0赞 JamesArmes 11/19/2023
@StephenOstermiller这个问题在14年前就被问到了。服务器故障不存在。

答:

21赞 David Z 2/6/2009 #1

听起来 Apache 在警告您,您有多个部分具有相同的 IP 地址和端口......至于让它在没有警告的情况下工作,我认为您需要使用服务器名称指示 (SNI) 之类的东西,这是一种识别作为 SSL 握手一部分请求的主机名的方法。基本上,它允许您通过SSL进行基于名称的虚拟托管,但我不确定浏览器对它的支持程度如何。除了像 SNI 这样的东西之外,对于您向公共互联网公开的每个 IP 地址,您基本上只能使用一个启用 SSL 的域名。<VirtualHost>

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

评论

0赞 JamesArmes 2/6/2009
大卫,谢谢你的回复。经过一些研究,我相信这将是要走的路。但是,Windows XP 下对 SNI 的支持有限。我想我无论如何都会尝试这个,因为我使用的是通配符证书。如果这不起作用,我想我现在将不得不忽略这些错误。
0赞 JamesArmes 2/6/2009
PS:大多数网站似乎将此称为服务器名称指示,而不是标识。
0赞 David Z 2/7/2009
啊,我的坏......我真的只记得首字母缩略词,SNI。我会编辑帖子。
3赞 Harold 2/6/2009 #2

您可以替换:

VirtualHost ipaddress:443

VirtualHost *:443

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

它可能会澄清这个信息。让 ServerName 指令担心路由消息请求。

同样,如果您在同一台机器上有多个 ip 的别名,您可能无法执行此操作。

评论

0赞 JamesArmes 2/6/2009
哈罗德,谢谢你的回复。我之前尝试过,但没有任何区别。
0赞 Powerlord 2/13/2009 #3

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

来源:Apache 2.2 SSL 常见问题 为什么不能使用基于名称的虚拟主机来识别不同的 SSL 虚拟主机?

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

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

评论

4赞 Vasyl Moskalov 9/2/2016
看起来这个答案有点过时了
0赞 Dilip Rajkumar 2/6/2017
你是绝对正确的,基于名称的SSL是行不通的。好链接。
7赞 user273370 2/15/2010 #4

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

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

1赞 DataCZ 10/2/2011 #5

首先,您需要配置文件中的 NameVirtualHost ip:443! 你可能有一个最后有 80 的,但你还需要一个有 443 的。

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

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

评论

0赞 jdavid.net 1/25/2013
您的一个端口号是错误的,我无法修复它 6 char min edit。
2赞 ELinuxbook 12/21/2016 #6

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 [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赞 Yasiru G 7/26/2018 #7

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

NameVirtualHost IP_Address:443

评论

0赞 Ryan 6/12/2020
我确保在 httpd.conf 中留下注释,然后在 httpd-vhosts.conf 中工作:#Include conf/extra/httpd-ssl.confNameVirtualHost *:443 (linebreak) Listen 443 (linebreak)<VirtualHost *:443> (linebreak) SSLEngine On (linebreak) ...
0赞 Jaime Montoya 11/17/2023 #8

我创建是为了包含要显示的内容。然后我用以下内容进行创作:/var/www/example.com/etc/apache2/sites-available/example.com-le-ssl.conf

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

我启用了该站点,然后,我用 激活了新配置。a2ensite example.com-le-ssl.confsystemctl reload apache2

我在我的博客 https://jaimemontoya.com/blog/2023/11/17/13/08/ 上发布了这个解决方案,其中包含一些屏幕截图和额外的详细信息。