我在虚拟主机中设置 SSL 时遇到问题。该设置在不安全的网站上运行良好。我希望它能与启用 SSL 的网站配合使用。
我的httpd-vhosts.conf如下:
NameVirtualHost 127.0.0.1
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect /binDebug folder to https
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} binDebug
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]
</IfModule>
<VirtualHost localhost>
ServerName localhost
DocumentRoot "C:\xampp\htdocs"
DirectoryIndex index.php index.html
<Directory "C:\xampp\htdocs">
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost virtual.c7beta.com>
ServerName virtual.c7beta.com
DocumentRoot "C:\Users\zee\Documents\Flex Builder 3\CLOUD\bin-debug"
DirectoryIndex index.php index.html
Alias /binDebug "C:\Users\zee\Documents\Flex Builder 3\CLOUD\bin-debug/"
<Directory "C:\Users\zee\Documents\Flex Builder 3\CLOUD\bin-debug">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
# SSLRequireSSL
</Directory>
</VirtualHost>
<VirtualHost virtual.app.c7beta.com>
ServerName virtual.app.c7beta.com
DocumentRoot "C:\development\app_server\httpdocs"
DirectoryIndex index.php index.html
<Directory "C:\development\app_server\httpdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
# SSLRequireSSL
</Directory>
</VirtualHost>
<VirtualHost virtual.s1.c7beta.com>
ServerName virtual.s1.c7beta.com
DocumentRoot "C:\development\storage_server\httpdocs"
DirectoryIndex index.php index.html
<Directory "C:\development\storage_server\httpdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
# SSLRequireSSL
</Directory>
</VirtualHost>
现在 SSLRequiesSSL 已被注释。有人可以检查一下并告诉我应该做哪些更改才能使用 https,就像 http 的工作方式一样。
我按照以下建议进行了配置更改:http://robsnotebook.com/xampp-ssl-encrypt-passwords看起来运行正常。但当我输入 servername.com 时,它仍然重定向到 servername.com/xampp
请帮助 Zeeshan
答案1
确保在 VirtualHost foo.bar 行之后输入端口号,即..
<VirtualHost Virtual.app.c7beta.com:443>
...
</VirtualHost>
<VirtualHost Virtual1.app.c7beta.com:80>
....
</VirtualHost>
这是根据 apache 配置文档设置虚拟 SSL 服务器的。
答案2
SSL 证书在 SSL 协商期间呈现给浏览器,该协商发生在 HTTP 协议层启动之前,并且 Host: 标头被发送到服务器,说明需要哪个站点。
您有两个选择:
- 通过 subjectAltName 别名(或通配符)使用对多个主机有效的证书
- 使用 TLS ServerNameIndication 在 SSL/TLS 设置期间发送所需的服务器主机名
1 很简单,只要你能与 CA 打交道来获得这样的证书即可。2 要求客户端和服务器都支持 TLS,客户端支持 SNI(这意味着非常现代的浏览器),服务器也支持它,这对于 Apache 来说意味着需要补丁。请参阅https://sni.velox.ch/补丁。