Thi*_*Lam 6 ssl https apache-2.2
假设我想要使用 Apache 服务器在同一台机器上运行两个安全站点:
1. https://example.com
2. https://example.ca
Run Code Online (Sandbox Code Playgroud)
是否可以对上述两个站点使用端口 443?
emi*_*lls 14
正如已经解释过的,SSL 连接是在通过连接发送任何实际数据之前创建的,因此 Apache 无法为每个虚拟站点提供不同的 SSL 证书,因为它不知道正在请求哪个服务器名称。这意味着无论实际请求什么服务器名称(在本例中为“mysite.com”或“mysite.ca”),Apache 都将使用它已配置为使用的默认 SSL 证书进行响应。这可能在“默认” 443 VirtualHost 或全局 Apache 配置中声明。
从可用性的角度来看,这意味着您绝对可以从同一个 apache 主机和 IP 托管两个站点,但是用户在接受证书时会收到警告,告诉他们证书用于错误的站点。解决这个问题的唯一方法是拥有两个不同的 IP 地址并配置您的虚拟主机,以便它们每个都侦听不同的地址。(确保相应地更新DNS)
证书交换发生后,将应用正常的 VirtualHost 规则,如果您希望这样做,您实际上可以在每个服务器名称上托管不同的内容。
这些示例有点粗糙,如果您还不了解基础知识,则需要查阅官方 apache 文档,了解有关设置虚拟主机和配置 ssl 的确切参数名称。
示例:位于不同 IP 地址、具有不同文档根的两台服务器,每台服务器都提供正确的证书
<VirtualHost 1.1.1.1:443>
ServerName mysite.com
DocumentRoot /var/www/comroot
SSLEngine On
// Configure certificate for mysite.com
</VirtualHost>
<VirtualHost 2.2.2.2:443>
ServerName mysite.ca
DocumentRoot /var/www/caroot
SSLEngine On
// Configure certificate for mysite.ca
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
示例:同一 IP 上的两台服务器使用错误的证书(在其他地方配置),但仍根据服务器名称提供不同的内容。
<VirtualHost *:443>
ServerName mysite.com
DocumentRoot /var/www/comroot
SSLEngine On
</VirtualHost>
<VirtualHost *:443>
ServerName mysite.ca
DocumentRoot /var/www/caroot
SSLEngine On
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
Dav*_*ley 12
您可以使用多种方法从单个 IP 地址运行多个 SSL 站点,每种方法都有自己的缺点。
第一种方法是拥有涵盖两个站点的 SSL 证书。这里的想法是拥有一个单一的 SSL 证书,涵盖您想要从单一 IP 地址托管的所有域。您可以使用涵盖两个域的通配符证书或使用主题备用名称来执行此操作。
通配符证书将是 *.example.com,它将涵盖 www.example.com、mail.example.com 和 support.example.com。通配符证书存在许多问题。首先,每个主机名都需要有一个公共域,例如,使用 *.example.com,您可以拥有 www.example.com,但不能拥有 www.example.org。其次,您不能可靠地拥有多个子域,即您可以拥有 www.example.com,但不能拥有 www.eu.example.com。这可能适用于早期版本的 Firefox (<= 3.0),但不适用于 3.5 或任何版本的 Internet Explorer。第三,如果您希望由根 CA 签名,通配符证书比普通证书贵得多。
主题备用名称是一种使用 X509 证书扩展的方法,该扩展列出了对该证书有效的备用主机名。它涉及向证书添加“subjectAltName”字段,该字段列出了您希望证书涵盖的每个其他主机。这应该适用于大多数浏览器;当然是每个现代主流浏览器。这种方法的缺点是您必须列出服务器上将使用 SSL 的每个域。您可能不希望公开这些信息。您可能不希望在同一个证书上列出不相关的域。以后向您的证书添加其他域也可能很困难。
第二种方法是使用称为 SNI(服务器名称指示)的东西,它是 TLS 中的一个扩展,它解决了不知道要向客户端发送哪个证书的鸡和蛋问题,因为客户端还没有发送 Host: 标头。作为 TLS 协商的一部分,客户端发送所需的主机名作为选项之一。唯一的缺点是客户端和服务器支持。浏览器的支持往往比服务器好。Firefox 从 2.0 开始支持它。Internet Explorer 从 7 开始支持它,但仅在 Vista 或更高版本上支持。Chrome 也仅在 Vista 或更高版本上支持它。Opera 8 和 Safari 8.2.1 有支持。其他浏览器可能不支持。
阻止采用的最大问题是服务器支持。直到最近,两个主要的网络服务器都不支持它。Apache 从 2009 年 7 月发布的 2.2.12 开始获得 SNI 支持。截至撰写本文时,IIS 不支持任何版本的 SNI。nginx、lighttpd 和 Cherokee 都支持 SNI。
展望未来,SNI 是解决基于名称的 HTTPS 虚拟托管的最佳方法,但支持可能在一两年内不完整。如果您必须在不久的将来毫无问题地进行 HTTPS 虚拟主机,那么基于 IP 的虚拟主机是唯一的选择。
| 归档时间: |
|
| 查看次数: |
18408 次 |
| 最近记录: |