我的情况是,我们为客户托管多个网站,并且所有客户网站仅在 SSL 上运行。
目前,我们为 Apache 的每个客户端提供了一个单独的虚拟主机文件。除了服务器名称/别名和 SSL 配置部分外,每个文件几乎相同。其余配置几乎只是一些反向代理声明,用于告诉 Apache 终止 SSL,然后将流量传递到后端 IIS(.net 站点)。注意:所有站点都在同一个 IP 上运行,因此使用了 SNI,并且似乎运行良好(目前还没有兼容,这很好)。
我们拥有的另一个主要功能是,客户能够登录他们的“客户门户”(我们的网站)并生成 CSR,然后将其发送给第三方进行签名并将证书返回给我们。当他们生成 CSR 时,我们会将私钥保留在服务器上。
问题是:
1) 考虑到大多数文件在客户端之间是相同的,为每个客户端设置单独的虚拟主机文件很难维护。(此外,文件描述符限制也成为一个问题)
2) 客户可以随时更改其 SSL。例如,他们可能只剩下 2 个月的证书有效期,因此他们想登录其帐户并获取新的 CSR,然后在 2 个月内更改其 SSL 证书。问题在于我需要在 apache 上执行“重启”以重新加载证书。请记住,所有网站都通过同一个 Web 服务器运行,因此重启将影响所有网站。
所以:
1)我正在考虑转向 Apache 的“动态配置大规模虚拟主机”,但是,根据此站点这里,陈述如下:
“除非所有动态托管域名都是通配符子域名 SSL 证书所涵盖的子域名,否则服务器上无法终止 SSL“
然而,每个站点都有自己的域,而不仅仅是子域。
有没有办法在 Apache 中使用动态 SSL 来实现这种大规模托管。如果没有(我认为是这种情况),我可以在 Apache 的“前面”放置什么来终止 SSL 连接,而无需重新启动?(它需要有某种方法来更改证书,但不影响在同一 IP/Web 服务器上运行的其他站点)
即(HAProxy/Pound/其他?)--> Apache ---> IIS
答案1
我会把 Hitch TLS 代理放在 apache 前面 -https://hitch-tls.org/。
从功能列表中:
- 适合大型安装:性能高达 15 000 个监听套接字和 500 000 个证书。
- 支持证书和监听端点的无缝运行时配置重新加载。
除非您的用户非常需要自己创建 CSR 和选择 CA,否则请考虑使用 Let's Encrypt 和 Acmetool 启用 hitch。只需编写一些分别用于添加和删除域的脚本,您就可以获得所有域的免费证书,并自动颁发和自动续订。设置并忘记 = 双赢。
看:https://info.varnish-software.com/blog/five-steps-to-secure-varnish-with-hitch-and-lets-encrypt