使用HTTP / HTTPS混合代理目标站点时PingAccess问题

时间:2015-11-20 00:59:27

标签: ssl https proxy pingaccess

我正在尝试将PingAccess设置为代理(让我们调用PA主机 pagateway)用于共享Web会话的几个应用程序。我希望所有访问权限都来自PA pagateway并使用HTTPS,但后端系统不是HTTPS。

我定义了两个网站app1:8080app2: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) ... pagatewaypagateway之间)。我猜可能app1遇到了意外的主机头问题......

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

http://pagateway:5000

有谁知道我做错了什么?对于重定向到实际的服务器名称,我有点惊讶,说实话,但在那之后,我很难过这里的去处。

任何帮助都将不胜感激。

2 个答案:

答案 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解决此问题的说明。

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

    def header = exc?.request?.header;

         

    头.setHost( “pf.pingdemo.com:443”);?

         

    任何东西();

    1. 在Tomcat的server.xml中,将 scheme =“https” 添加到连接中:
    2. <Connector port="8080" protocol="HTTP/1.1"
      
                 connectionTimeout="20000"
      
                 redirectPort="443" scheme="https" />
      

      干杯, 担