通过https发出原始请求时在位置标头中获取http
我的问题是: 1) 当来自浏览器的原始请求是使用https发出的时,为什么要在位置标头中获取http作为方案 2) 这是wildfly负载平衡器的问题吗 我的请求头是: 我的回应是:通过https发出原始请求时在位置标头中获取http,http,ssl,redirect,https,undertow,Http,Ssl,Redirect,Https,Undertow,我的问题是: 1) 当来自浏览器的原始请求是使用https发出的时,为什么要在位置标头中获取http作为方案 2) 这是wildfly负载平衡器的问题吗 我的请求头是: 我的回应是: 负载平衡器是否正在剥离TLS并将请求作为HTTP转发到应用程序?如果是这样,那么应用程序在执行重定向时,可能使用的协议与接收请求时使用的协议相同 如果是这种情况,要么让应用程序强制使用httpshttps,要么让负载平衡器重写返回的响应 您可能需要设置proxy address forwarding=“true”和
负载平衡器是否正在剥离TLS并将请求作为HTTP转发到应用程序?如果是这样,那么应用程序在执行重定向时,可能使用的协议与接收请求时使用的协议相同 如果是这种情况,要么让应用程序强制使用https
https
,要么让负载平衡器重写返回的响应
您可能需要设置
proxy address forwarding=“true”
和/或request\u header\u add X-Forwarded-Proto https
以下是上述问题的详细解决方案说明:
我们在两台wildfly服务器前安装了一个负载平衡器。负载平衡器处理SSL握手并强制所有通信通过https
,wildfly节点上没有证书,负载平衡器和服务器之间的通信未加密,wildfly节点对SSL一无所知。负载平衡器和wildfly节点之间的通信通过http
协议
当用户点击受保护的页面时,例如
请求流程如下所示:
- 通过
https
- 通过
协议将负载平衡器连接到wildlfy节点http
- 在wildlfy服务器节点的http
http
听众
Strict-Transport-Security max-age=300;
这将有效地告诉客户端,他应该始终使用https与您的服务器联系。这似乎是一个重定向。嗨,Robert,是的,这只是重定向,但我们不是说像http重定向。在我们的LoginServlet代码中,我们在doPost方法
response.sendRedirect(“dashboard.html”)中编写如下代码在评论你的问题之前,我做了一些研究。这似乎表明,在实现TLS握手之前,可能会发生重定向。因此,我是否需要更改我的LoginServlet代码,比如用https替换http?或者我缺少一些负载平衡器配置?嗨,我没有得到任何线索,为什么响应头是http,有人能建议我如何解决这个问题吗?嗨,Mennon,如何检查:-负载平衡器正在剥离TLS并将请求作为HTTP转发到应用程序?您可以检查TLS证书的设置位置-如果它在负载平衡器上,那么它正在处理解密,如果它在应用程序(或应用程序服务器)上,那么就是这样。或者,如果不是您设置TLS,请询问设置TLS的人员/团队。@Mennon和@Subodh,我们在wildfly应用程序服务器配置中添加了proxy address forwarding=“true”
,另一个简单的修复方法是根本不在位置标头字段中设置方案
content-length: 0
date: Thu, 03 Jan 2019 04:55:42 GMT
location: http://10.43.201.207/myapp/dashboard.html?init=1
server: WildFly/12
set-cookie: APP_AUTH=leTPWYd1222zsrrtRRtgpuEWEWc7pR0CBuNPYPT5QHbGn_Db7ICK; path=/; secure; HttpOnly
set-cookie: JSESSIONID="leTee33333PWYdSDSDweetRRtgpuc7pR0CBuNPYPT5QHbGn_Db7ICK.master-0:master-server"; Version=1; Path=/myapp; Secure; HttpOnly
status: 302
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: Undertow/1
x-xss-protection: 1; mode=block
Strict-Transport-Security max-age=300;