1

我正在尝试将 PingAccess 设置为 pagateway共享 Web 会话的几个应用程序的代理(我们称之为 PA 主机)。我希望所有访问都通过 PA 网关并使用 HTTPS,但后端系统不是 HTTPS。

我定义了两个站点,app1:8080并且app2:8080. 两者都设置为“安全”= 否和“使用目标主机头”= 是。

我在端口 5000 和 5001 上定义了侦听器,它们都设置为“安全”= 是。

我发现的第一个问题是,当我以这种方式访问​​任一应用程序时(https://pagateway:5000例如转到http://app1:8080通过 PingAccess。对于网络之外的用户,他们甚至无法做到这一点,因为app1主机甚至不可见或不可访问。

我想也许我需要将“使用目标主机头”关闭为 false,但 Chrome 提示我下载包含 NAK、ETX、ETX、NUL、STX、STX 代码的文件,并且在 PA 日志中我收到 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)
    ...

我不确定 SSL 错误来自进程的哪一部分(在浏览器和pagateway,或pagateway和之间app1)。我猜可能app1是意外的主机头有问题......

在另一个变体中,我关闭了 PA 侦听器上的 SSL(我还必须将 PingFederate 客户端设置中的 PingAccess 回调 URL 更改为 http)。但是当我通过访问它时,http://pagateway:5000我在浏览器中收到了一条通用的 PingFederate 错误消息,并且在 PA 日志中出现了另一个错误:

2015-11-20 11:37:25,764 DEBUG [DBxHnFjViCgLYgYb-IrfqQ] com.pingidentity.pa.core.interceptor.flow.InterceptorFlowController:148 - Invoking request handler: Scheme Validation for Request to [pagateway:5000] [/]
2015-11-20 11:37:25,764 DEBUG [DBxHnFjViCgLYgYb-IrfqQ] com.pingidentity.pa.core.interceptor.flow.InterceptorFlowController:200 - Exception caught.  Invoking abort handlers
com.pingidentity.pa.sdk.policy.AccessException: Invalid request protocol.
    at com.pingidentity.pa.core.interceptor.SchemeValidationInterceptor.handleRequest(SchemeValidationInterceptor.java:61)

有谁知道我做错了什么?老实说,我对重定向到实际服务器名称感到有点惊讶,但在那之后,我对从这里去哪里感到困惑。

任何帮助,将不胜感激。

4

2 回答 2

1

您是否就此联系过我们的支持人员?这听起来像是需要深入挖掘的东西 - 但我可以提出一些高级建议:

查看浏览器跟踪以确定重定向何时发生到后端站点。通常这是因为来自后端 Web 服务器的重定向中有一个 Location 标头,该标头(本质上)是一个绝对 URL,但指向它而不是指向外部的主机名。

一个常见的解决方案是将 Target Host Header 设置为 False - 这样它将从浏览器接收未经修改的请求,并且后端服务器应该知道将自己表示为那个(如果它在代理后面表现良好)。

如果后端服务器不能这样做(听起来好像不能) - 您应该考虑为该应用程序分配重写规则。有关它们的更多详细信息,请访问:https ://support.pingidentity.com/s/document-item?bundleId=pingaccess-52&topicId=reference%2Fui%2Fpa_c_Rewrite_Rules_Overview.html 。特别是“重写响应头规则”将重写 HTTP 重定向中的位置头。

仅供参考 - “无效的请求协议”。您在描述底部看到的错误可能是由于您定义的应用程序上的“需要 HTTPS”标志。

于 2015-11-20T19:51:18.230 回答
0

如果在末尾添加斜杠(https://pagateway:5000/webapp/),您是否有同样的问题?您的应用程序服务器将根据它认为是真正的主机来重写 URL。这是为了解决一些与目录列表相关的安全问题。

您使用的是哪个应用程序服务器?所有应用服务器都是唯一的,但我将提供有关如何使用 Tomcat 解决此问题的说明。

  1. 添加强制应用程序服务器使用面向外部的主机名的全局规则。这是一个示例 Groovy 脚本:

def header = exc?.request?.header;

header?.setHost("pf.pingdemo.com:443");

任何事物();

  1. 在 Tomcat 的 server.xml 中,将scheme="https"添加到连接中:
<Connector port="8080" protocol="HTTP/1.1"

           connectionTimeout="20000"

           redirectPort="443" scheme="https" />

干杯,谭

于 2015-11-24T06:45:18.873 回答