Apache 和 IIS 共享相同的 SSL 证书

标签 apache iis configuration ssl-certificate

我有两个应用程序(PHP 和 .NET)在同一台机器上运行,但服务器不同(一个在 Apache 上,一个在 IIS 上)。我也有 PHP 应用程序使用的 SSL 证书。我希望我的 .NET 应用程序在同一个域名上工作并使用同一个证书。

我应该如何配置我的服务器?

如有任何帮助,我将不胜感激。

最佳答案

HTTPS 在检查证书时只验证主机名(参见 RFC 2818 Section 3.1 ),而不是端口,因此在同一主机上为两个不同的应用程序使用相同的证书应该没有任何问题。

你可以:

  • https://www.example.com/ 上的 Apache Httpd(端口 443,默认)
  • https://www.example.com:8443/(端口 8443)上的 IIS

如果您想为 Apache Httpd 和 IIS 使用相同的端口,就会出现问题。在 HTTPS 的非标准端口上运行不同的服务器不一定是个好主意:这可能会导致问题,因为某些防火墙(和某些代理服务器)不允许您连接到 443(或至少)以外的其他端口上的 HTTPS ,端口 8443 将不会打开)。

一个解决方案是使用 Apache Httpd 作为前端并转发请求的“部分”(例如以 https://www.example.com/iis/ 开头的所有内容) ) 到后面的 IIS。这可以使用反向代理来完成(请参阅 Apache Httpd 中的 mod_proxy_http)。如果您的 IIS 服务器在同一台机器上,重定向可以有效地转到 localhost(在您为 IIS 选择的端口上,可能不是默认的 80)。在这种情况下,Apache Httpd 和 IIS 之间的连接不需要使用 SSL/TLS 进行保护,因此您不需要为 IIS 设置证书(如果您确实需要,可以,但它在localhost 连接)。来自用户的所有 SSL/TLS 连接都将以 Apache Httpd 结束,然后它会在内部将一些请求发送到后面的 IIS。

当将 Apache Tomcat(或 Java 容器)置于 Apache Httpd 之后时,通常可能会有更多关于此的文档可用,但将 Tomcat 替换为 IIS 时的原则应该相同。

这里是一些关于使用 Jetty 的 Apache Httpd 的文档:http://wiki.eclipse.org/Jetty/Howto/Configure_mod_proxy#Configuring_Apache_mod_proxy_with_Jetty

从 Apache Httpd 的角度来看,使用 IIS 而不是 Jetty 应该非常相似。如果您的某些 IIS 应用配置为需要这样做,您可能需要调整 IIS 配置以使其假装其传入请求来自 HTTPS(因为它们将来自纯 HTTP)。

我认为 IIS 也有反向代理功能,所以如果这种方法太棘手,您应该能够反转角色。寻找使用 IIS 作为您的 HTTPS 入口点并将您的 Apache/PHP 应用程序放在后面。

关于Apache 和 IIS 共享相同的 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834403/

相关文章:

configuration - 如何在 nginx 中重用服务器配置?

java - 在 Spring 框架中使用抽象工厂

linux - Gitlab 在端口 8080 上

django - Apache mod_wsgi django调用keras模型时如何释放占用的GPU内存?

powershell - 我想通过命令行使用自定义帐户验证应用程序池身份

asp.net - HttpContext.Current.User.Principal 与 WindowsIdentity.GetCurrent()

.net - IIS 7.5 - 没有扩展名的文件导致错误 404.17

java - 当配置属性缺少前缀时,使映射为空且不为空

apache - URL 重写如何工作?

php - WAMP/XAMPP 在 localhost 上的响应非常慢