2016-08-04 75 views
0

我们运行一个使用WCF托管的网站。 该网站托管在:https://foo.com和SSL证书模板使用下列命令注册:主机头可以不同于网址

netsh http add sslcert hostnameport=foo.com:443 

当我们在浏览网站的服务器上,所有的罚款,而该证书是有效的。

服务器前有一个负载均衡器,它监听bar.com,然后将请求重定向到我们的服务器。 负载均衡器不会重写获取URL,而只会重写主机头。

重写的标题是这样的:

GET https://foo.com/ HTTP/1.1 
Host: bar.com 
Connection: keep-alive 

现在我们有一些问题,这表明SSL证书在这种情况下无效。

负载均衡器本身的证书注册的听https://bar.com

问题:

  • 它是确定/允许的GET URL和HTTP头中的主机有什么不同?
  • 如果可以在标题中使用不同的值,我们应该在哪个网址上运行网站?获取网址或主机网址?
+0

嗯,哪些连接是SSL?客户端 - > LB,LB->服务器? LB有自己的证书吗?如果是,它的CN是什么? –

+0

负载均衡器本身有一个注册的证书,正在监听https://bar.com – Manuel

回答

1

好,引用RFC2616:

如果请求URI是一个绝对URI,主机是 的Request-URI的一部分。请求中的任何主机头字段值必须为 。

所以,回到你的问题: 这是允许的,但一个坏主意,因为它会产生混淆,最好使用相对路径。即

GET /path HTTP/1.1 

代替

GET https://foo.com/path HTTP/1.1. 

修改LOADBALANCE配置这样做。或者使两个值相同。

如果主机标头的值与请求URI不同,那么URI优先于主机标头。

+0

这可能是问题所在。我现在联系负责网络/负载均衡的DevOps。我会添加答案/标记作为答案尽快 – Manuel