AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 73162
Accepted
Thierry Lam
Thierry Lam
Asked: 2009-10-10 17:57:26 +0800 CST2009-10-10 17:57:26 +0800 CST 2009-10-10 17:57:26 +0800 CST

我可以在同一台服务器上使用端口 443 运行两个不同的安全站点吗?

  • 772

假设我想要两个使用 Apache 服务器在同一台机器上运行的安全站点:

 1. https://example.com
 2. https://example.ca

上述两个站点都可以使用端口 443 吗?

apache-2.2
  • 6 6 个回答
  • 19692 Views

6 个回答

  • Voted
  1. Best Answer
    emills
    2009-10-10T18:48:27+08:002009-10-10T18:48:27+08:00

    如前所述,SSL 连接是在通过连接发送任何实际数据之前创建的,因此 Apache 无法为您的每个虚拟站点提供不同的 SSL 证书,因为它不知道正在请求哪个服务器名称。这意味着无论实际请求的服务器名称是什么(在本例中为“mysite.com”或“mysite.ca”),Apache 都会使用已配置为使用的默认 SSL 证书进行响应。这可能在“默认”443 VirtualHost 或全局 Apache 配置中声明。

    从可用性的角度来看,这意味着您绝对可以从相同的 apache 主机和 IP 托管两个站点,但是用户在接受证书时会收到警告,告诉他们证书是用于错误的站点。解决此问题的唯一方法是拥有两个不同的 IP 地址并配置您的虚拟主机,以便它们各自侦听不同的地址。(确保相应地更新 DNS)

    证书交换完成后,将应用正常的 VirtualHost 规则,如果您愿意,您实际上可以在每个服务器名称上托管不同的内容。

    这些示例有点粗略,如果您还不了解基础知识,则需要查阅有关设置虚拟主机和配置 ssl 的确切参数名称的官方 apache 文档。

    示例:具有不同文档根的不同 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>
    

    示例:同一 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>
    
    • 14
  2. David Pashley
    2009-10-10T23:05:19+08:002009-10-10T23:05:19+08:00

    您可以使用几种方法从一个 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 的虚拟主机是唯一的选择。

    • 12
  3. David Mackintosh
    2009-10-10T18:28:02+08:002009-10-10T18:28:02+08:00

    仅当站点位于其自己的 IP 上时。

    SSL 连接发生在客户端请求网站之前,因此当 SSL 连接建立时,服务器不知道客户端要请求什么。

    例如,如果您提供 .com SSL 证书,这会使请求 .ca 的客户不高兴。

    解决方案是为 .ca 设置第二个 IP,并让 Web 服务器的单独实例使用 .ca 的 SSL 证书在该 IP 上侦听。

    • 0
  4. joe
    2009-10-10T23:11:20+08:002009-10-10T23:11:20+08:00

    是的,只要您为机器分配多个 IP。每个 SSL 证书/域一个。通常,每个 SSL 服务器都需要一个唯一的 IP。Windows、Linux、BSD 和 Solaris 都支持单个 NIC 上的多个 IP,或者您可以添加额外的 NIC 或多端口 NIC。在 Web 服务环境中为每台机器/NIC 分配 10-20 个 IP 是很常见的。

    其他不适用于您的标准的 SSL 选项。

    通配符 SSL 证书可以托管多个子域,只要二级域相同,通常用于海量虚拟主机。

    共享 SSL 证书可用于同一域的多台计算机,通常用于故障转移和负载平衡。

    • 0
  5. Nikolas Sakic
    2009-10-11T03:01:27+08:002009-10-11T03:01:27+08:00

    好的答案,然而,使用一个 HTTP 服务器来托管两个站点有一个 SPOF - 即一次 apache 服务器实例。如果该 apache 服务器出现故障,则两个站点都无法访问。双端口以太网卡怎么样?或者,更好的是,使用虚拟化。我是 xen 或 openVZ 等虚拟化的忠实粉丝。但是,您需要在硬件上花费一些钱。

    • -2
  6. Moon
    2016-01-04T09:28:12+08:002016-01-04T09:28:12+08:00

    亲爱的用户请在您的 apache2 前面使用 haproxy,在这种情况下,您将能够在不同的 ssl 端口上转发同一 apache 服务器上的不同域,但您需要在启用了 443 和 8443 等端口的站点下配置两个不同的站点可以复制过去的第一个 ssl 站点并仅在端口和域别名内更改您将找到有关 apache2 ssl 激活的帮助您还需要使用 2 个 ips 定义主机文件,例如 127.0.1.1 web-ssl1 127.0.2.1 web-ssl2

    • -2

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve