提问人:JamesArmes 提问时间:2/6/2009 最后编辑:Stephen OstermillerJamesArmes 更新时间:11/19/2023 访问量:110141
使用 SSL 的 Apache 名称虚拟主机 [已关闭]
Apache Name Virtual Host with SSL [closed]
问:
这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 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:443
host2.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 在警告您,您有多个部分具有相同的 IP 地址和端口......至于让它在没有警告的情况下工作,我认为您需要使用服务器名称指示 (SNI) 之类的东西,这是一种识别作为 SSL 握手一部分请求的主机名的方法。基本上,它允许您通过SSL进行基于名称的虚拟托管,但我不确定浏览器对它的支持程度如何。除了像 SNI 这样的东西之外,对于您向公共互联网公开的每个 IP 地址,您基本上只能使用一个启用 SSL 的域名。<VirtualHost>
当然,如果您能够正确访问网站,那么忽略警告可能会很好。这些特定的不是很严重 - 它们主要表明如果您遇到问题时要注意什么
评论
您可以替换:
VirtualHost ipaddress:443
跟
VirtualHost *:443
您可能需要在所有 virt 主机上执行此操作。
它可能会澄清这个信息。让 ServerName 指令担心路由消息请求。
同样,如果您在同一台机器上有多个 ip 的别名,您可能无法执行此操作。
评论
Apache 不支持基于名称的虚拟主机上的 SSL,仅在基于 IP 的虚拟主机上支持。
来源:Apache 2.2 SSL 常见问题 为什么不能使用基于名称的虚拟主机来识别不同的 SSL 虚拟主机?
与SSL不同,TLS规范允许基于名称的主机(其他人提到的SNI),但Apache尚不支持此功能。据推测,它将在将来的版本中针对 openssl 0.9.8 进行编译。
此外,mod_gnutls声称支持 SNI,但我从未真正尝试过。
评论
据我所知,Apache从2.2.12版本开始支持SNI 遗憾的是,文档尚未反映这一变化。
继续 http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI 直到完成
首先,您需要配置文件中的 NameVirtualHost ip:443! 你可能有一个最后有 80 的,但你还需要一个有 443 的。
其次,您需要一个 *.domain 证书(通配符)(可以制作一个)
第三,你只能在一个ip中制作something.domain网站(因为证书)
评论
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>
您必须添加以下部分才能启用给定 IP 的功能。NameVirtualHost
NameVirtualHost IP_Address:443
评论
#Include conf/extra/httpd-ssl.conf
NameVirtualHost *:443 (linebreak) Listen 443 (linebreak)<VirtualHost *:443> (linebreak) SSLEngine On (linebreak) ...
我创建是为了包含要显示的内容。然后我用以下内容进行创作:/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.conf
systemctl reload apache2
我在我的博客 https://jaimemontoya.com/blog/2023/11/17/13/08/ 上发布了这个解决方案,其中包含一些屏幕截图和额外的详细信息。
评论
Common Name