我已经安装了一个Debian LAMP服务器,我托pipe多个网站。 据我所知,我只能在其中一个上使用SSL,如果我想在两个或更多的网站上使用SSL,我不得不添加另一个IP–到目前为止这么好。
问题是,只要我inputhttps://siteone.com或https://sitetwo.com它总是显示来自https://siteone.com的内容。 我宁愿它显示一些错误信息或其他东西,但绝对不显示我的主要网站的内容(这是我想要的SSL工作)。
注意:我的Debiannetworking服务器使用ispconfig作为控制面板。
确保您的虚拟主机正确设置,使每个虚拟主机只绑定到一个IP地址。 基于IP的虚拟主机的Apache文档说,你的虚拟主机应该看起来类似于以下内容:
<VirtualHost 192.168.0.1:443> ServerAdmin [email protected] DocumentRoot /groups/smallco/www ServerName smallco.example.com ErrorLog /groups/smallco/logs/error_log TransferLog /groups/smallco/logs/access_log </VirtualHost> <VirtualHost 192.168.0.2:443> ServerAdmin [email protected] DocumentRoot /groups/baygroup/www ServerName baygroup.example.com ErrorLog /groups/baygroup/logs/error_log TransferLog /groups/baygroup/logs/access_log </VirtualHost>
在您的apacheconfiguration中列出的第一个虚拟主机是默认的主机。 在你的前两个之前添加一个假的,以确保你实际上匹配你的虚拟主机,而不是盲目地落入第一个虚拟主机。 以下是关于IBM的这种设置的更完整的文章: http : //www-01.ibm.com/support/docview.wss? uid= swg21045922
请参阅本页标题为在具有一个IP地址的Apache中使用多个SSL证书 。
如果Stephen的build议不适合你,那么请确保你的apacheconfiguration文件中也有以下行:
NameVirtualHost *:443
另外,FRB是正确的。 您可以在任意数量的虚拟机上安装SSL。 只需将SSLconfiguration信息放在<VirtualHost></VirtualHost>代码块中即可。
像这样的东西(也注意到在使用命名的主机时不需要绑定到特定的IP地址):
## SSL (HTTPS) PORT 443 Listen 443 NameVirtualHost *:443 LoadModule ssl_module modules/mod_ssl.so SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin <VirtualHost *:443> ServerName host1.com SSLEngine on SSLOptions +StrictRequire SSLProtocol -all +TLSv1 +SSLv3 SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM SSLCertificateFile /etc/httpd/ssl/host1.crt SSLCertificateKeyFile /etc/httpd/ssl/host1.key SSLVerifyClient none SSLProxyEngine off SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" DocumentRoot /var/www/host1/ <Directory "/var/www/host1/"> Options Indexes FollowSymLinks AllowOverride All Order Allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:443> ServerName host2.com SSLEngine on SSLOptions +StrictRequire SSLProtocol -all +TLSv1 +SSLv3 SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM SSLCertificateFile /etc/httpd/ssl/host2.crt SSLCertificateKeyFile /etc/httpd/ssl/host2.key SSLVerifyClient none SSLProxyEngine off SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" DocumentRoot /var/www/host2/ <Directory "/var/www/host2/"> Options Indexes FollowSymLinks AllowOverride All Order Allow,deny Allow from all </Directory> </VirtualHost>
实际上,您可以在同一IP地址上执行多个SSL站点,而无需使用SNI。 (主要)捕获是您必须使用相同的证书,必须具有所有必需的域作为主题替代名称。 (这些将使证书成本增加。)这意味着所有的网站都是针对同一个组织的。
Apache2分两个阶段处理SSL。 第一阶段涉及在默认(第一个)虚拟主机块中为IP地址检查“SSLEngine on”语句,然后启动SSL连接。 第二阶段涉及检查ServerName / ServerAlias指令,直到识别正确的虚拟主机。
所以你实际上并不需要在每个虚拟主机上重复SSL *指令,但是这有助于吸引人们注意到它是一个SSL站点。 (否则,他们必须注意端口号。)
次要的问题是,每次Apache启动时,都会向error_log添加警告。