我编写了一个 ASP.NET MVC 应用程序,允许用户指定自己的自定义域。我已将 IIS 配置为将所有请求发送到默认网站,因此我不需要使用主机标头。一切都运行正常。唯一的问题是 SSL。
我知道这个问题在很多论坛上都被问过很多次了,但答案通常相互矛盾,或者说得非常绝对,比如(这不可能)。这对我来说真的不是一个选择。我在这里寻找的是一些选择;我愿意接受非常规的做法 :)。
我看到一些建设性的回应建议使用 ISA 服务器作为 SSL 代理。有人对此有更多了解吗?或者有人配置过这个并且成功了吗?
基本上,我想为我的用户提供一种从应用程序请求 CSR 的方法,去购买和下载 SSL 证书,返回我的应用程序并上传由授权认证公司颁发的证书。
我希望这样做,而不必向想要在其网站上使用自定义域和 SSL 的客户提供单独的 IP 地址。这仅仅是因为我的应用程序托管在亚马逊云上,他们不愿意给我一大块 IP 地址。
我的应用程序可以托管在 IIS6 或 IIS7 上。
解决方案:感谢大家的帮助。我以前当然没有现在这么了解这个问题。我认为我现在的解决方案是生成通配符证书,并强制我的客户使用 clientname.someshareddomain.com(如果他们想要安全连接)。对于那些不同意这样做的客户,我可能会通过 api 调用亚马逊网络服务来配置另一个弹性 IP 地址,在 IIS 中创建一个新网站并将其指向我的应用程序的根文件夹,然后以编程方式从该新网站生成 CSR。我只需要与亚马逊达成某种协议,让他们给我一个不错的 IP 地址块。
答案1
很抱歉,您不喜欢“您做不到”这个答案,但您无法做您想做的事。技术不允许按照您想要的方式工作。
原因如下。
HTTP 协议允许多个服务器共享一个 IP 地址。它通过 HTTP/1.1 Host 标头实现此目的:
Host: servername.example.com
SSL 握手发生前HTTP 握手发生。这意味着服务器不知道根据客户端想要的服务器向客户端提供什么证书。
因此,您可以尽最大努力,但无法在单个 IP 地址上使用多个证书。无论您多么努力,这对您来说都不是一个选择。
答案2
正如迈克尔所说,如果某件事是不可能的,那么跺脚、撅嘴也改变不了事情。
从技术角度来说,将单独的 SSL 证书放在单独的 IP 地址上并不是问题;这只是一个配置问题(这是一个简单的编程问题),并且拥有一个了解大型公司的需求并愿意为 SSL 域预先分配适当大小的地址块的网络提供商。
然而,还有另一种选择,即“服务器名称指示“,通过这种方式,浏览器可以在 SSL 协商时告诉服务器它想要与哪个 vhost 通信,这样服务器就可以提供正确的证书。不幸的是,对此的支持并不普遍;根据上述维基百科页面,IIS 6 和 7 都无法在服务器端处理它,并且您需要运行 Vista 才能在客户端与 IE 一起使用它(Firefox、Opera 和 Chrome 都已经支持它一段时间了)。
因此,如果您愿意切换到一个不错的 Web 服务器,并疏远仍在使用旧版 Microsoft OS 上的过时浏览器的用户群,那么您可以使用它。不过,似乎没有人想惹恼在 Windows 98 上运行 IE 5.5 的 Tillie 阿姨……
答案3
如果问题在于提供安全会话(而不是每个客户拥有自己的证书),为什么不通过使用通配符 SSL 证书来减轻负担和复杂性呢?