我正在尝试将PingAccess设置为代理(让我们调用PA主机
pagateway
)用于共享Web会话的几个应用程序。我希望所有访问权限都来自PA pagateway并使用HTTPS,但后端系统不是HTTPS。
我定义了两个网站app1:8080
和app2:8080
。两者都设置为“安全”=否和“使用目标主机头”=是。
我在端口5000和5001上定义的侦听器都设置为“secure”= yes。
我发现的第一个问题是,当我以这种方式访问任一应用程序时(例如转到https://pagateway:5000
),在使用PingFederate成功进行身份验证后,我最终会被重定向到实际的基础主机名(例如{{1 }}),意味着与app的任何后续交互都不是通过PingAccess。对于网络外的用户,他们甚至无法做到这一点,因为http://app1:8080
主机甚至不可见或无法访问。
我想也许我需要关闭“使用目标主机标头”为false,但Chrome会提示我下载包含NAK,ETX,ETX,NUL,STX,STX代码的文件,并且在PA日志中我得到了SSL错误:
app1
我不确定SSL错误来自哪个部分(浏览器与2015-11-20 11:13:33,718 DEBUG [6a5KYac2dnnY0ZpIl-3GNA] com.pingidentity.pa.core.transport.http.HttpServerHandler:180 - IOException reading sourceSocket
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
...
或pagateway
和pagateway
之间)。我猜可能app1
遇到了意外的主机头问题......
在另一个变体中,我在PA侦听器上关闭了SSL(我还必须将PingFederate客户端设置中的PingAccess回调URL更改为http)。但是当我通过app1
访问它时,我在浏览器中收到了一个通用的PingFederate错误消息,并在PA日志中出现了不同的错误:
http://pagateway:5000
有谁知道我做错了什么?对于重定向到实际的服务器名称,我有点惊讶,说实话,但在那之后,我很难过这里的去处。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您是否就此问题与our support进行了联系?这听起来像是需要深入挖掘的东西 - 但我可以提出一些高级建议:
查看浏览器跟踪以确定重定向何时发生在后端站点。通常这是因为在后端Web服务器的重定向中有一个Location头(本质上)是一个绝对URL,但指向它而不是面向外部的主机名。
一个常见的解决方案是将Target Host Header设置为False - 因此它将从浏览器接收未经修改的请求,并且后端服务器应该知道将其表示为自身(如果它在代理后面表现良好)。
如果后端服务器无法做到这一点(听起来不可能) - 您应该考虑为该应用程序分配重写规则。有关它们的更多详细信息,请访问:https://documentation.pingidentity.com/pingaccess/pa32/index.shtml#concepts/Rewrite_Rules_Overview.html。特别是“重写响应标头规则”将重写HTTP重定向中的位置标头。
仅供参考 - “无效的请求协议”。您在描述底部看到的错误可能是由于您定义的应用程序上的“需要HTTPS”标志。
答案 1 :(得分:0)
如果在末尾添加尾部斜杠(https://pagateway:5000/webapp/),是否会出现同样的问题?您的应用程序服务器将根据它认为真正的主机重写URL。这是为了解决有关目录列表的一些安全相关问题。
您使用的是哪个应用服务器?所有应用服务器都是唯一的,但我将提供有关如何使用Tomcat解决此问题的说明。
def header = exc?.request?.header;
头.setHost( “pf.pingdemo.com:443”);?
任何东西();
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" scheme="https" />
干杯, 担