据我所知,当Apache收到一个正在监听的TCP端口(例如80,443)的请求时,它将通过查看HTTP头主机来决定请求哪个主机.然后,服务器将知道应将请求重定向到哪个虚拟主机.
但它如何通过SSL / TLS实现HTTP?由于整个HTTP请求正在加密(至少我认为我已经在某处读过),因此只能在服务器解密数据后才能读取标头信息.但是为了解密,它需要知道要使用哪个密钥对,因为您可以在Web服务器上安装多个SSL证书.
那么服务器如何知道解密所需的密钥呢?
我猜:
我可以想象TLS握手提供了必要的信息.
关于“possible duplicate”标志:
虽然我同意链接问题和我自己的问题的答案是相似的,但我必须说问题是不同的.毫无疑问,是否或如何托管具有独立SSL证书的多个站点是可能的.相反,我的问题涉及潜在的技术方面.
解决方法
最初,Web服务器不知道.这就是您需要为要在服务器上托管的每个SSL vhost单独的IP地址的原因.这样,服务器就知道当IP X上的连接进入时,他需要使用相关vhost的配置(包括证书).
这改变了Server Name Indication,一个TLS扩展,确实允许客户端在握手过程中指示所需的主机名.这个扩展用于所有现代操作系统,但旧的浏览器或服务器不支持它,因此如果您希望客户端仍然在WinXP上使用IE 6,那么您将失去运气.