SimpleSamlPhp(SSP):“随机”错误 - 如何更改后端/存储?

时间:2016-04-15 20:06:18

标签: php saml simplesamlphp

我使用simplesamlphp测试过去几天的SAML 2.0。我有SP方面连接到我公司的IdP。我处于这样的情况......大多数时候,这是令人困惑的部分。事实:

  • 在RHEL 7上使用simplesamlphp 1.14.2 with apache 2.4
  • 我正在通过登录和退出多次测试
  • 我的网站/服务正在使用https。这同样适用于simplesamlphp。 IdP是http
  • IdP配置是通过内置XML解析器自动生成的。我们正在使用SHA256并使用自签名证书唱出注销消息
  • 有效!在Firefox和Chrome中有95%的时间,这对我来说已经足够了,但它使我的服务还没有准备好生产......
  • 其他5%抛出类似于this的错误:“无法找到当前绑定。”。区别在于我的日志显示为:

    Oct 21 17:30:15 simplesamlphp WARNING [6b6e3c270f] Unable to find the SAML 2 binding used for this request.array (\n)
    Oct 21 17:30:15 simplesamlphp WARNING [6b6e3c270f] Request method: 'GET'array (\n)
    

    以上只是上一篇文章修改的一个例子。请注意,我确实在两行中都看到了array。我已经查看了记录此错误的源代码,我无法弄清楚它为什么存在(不确定它是否重要 - 似乎是由日志工具引入)

  • 这就是事情变得奇怪的地方!我有时会得到通常的(无限递归左右)PHP错误:Allowed memory size of X bytes exhausted (tried to allocate Y bytes)。在我的情况下,X是256M,但Y是2 + G !!!这种情况很少见但却会发生。当它发生时,PHP没有多大帮助,它说它发生在“未知的第0行”:

    [18-Apr-2016 12:07:18 Europe/London] PHP Fatal error:  Allowed memory size of 262144000 bytes exhausted (tried to allocate 2480381656 bytes) in Unknown on line 0
    
  • 有时日志显示没有错误,但浏览器抱怨空响应

  • Edge / IE浏览器似乎变得更容易混淆(毫不奇怪:))但它产生相同的日志。例如,空响应显示为“无法加载页面”错误,而该错误反过来表明DNS失败。

  • 大多数时候使用后退按钮可以使一切正常。并非所有时间......有时间它会卡住,在这种情况下会出现simplesamlphp错误页面,错误可能会有所不同(SimpleSAML_Error_Error: SLOSERVICEPARAMS)。 URL指向simplesamlphp而不是服务或IdP,因此刷新会再次导致错误页面。刷新后,回击是没有意义的,导致循环回到错误页面

我的想法:

  • 它似乎不是配置错误。如果它是可复制的...... IdP很高兴签到我们进出
  • 它不应该是特定于浏览器的
  • PHP分配给大量内存让我相信某处有一个错误,但1.14是最新的稳定

更新1:

相关(同一错误) - https://groups.google.com/forum/#!topic/simplesamlphp/C8XAQblAECU

更新2:

经过大量阅读和大量日志后,我认为SSP与我的应用程序之间存在会话冲突。从应用程序中删除所有与会话相关的代码,使SSP像魅力一样工作。使用我的会话代码,我看到以下错误:

  • PHP Warning: Unknown: Could not call the sapi_header_callback in Unknown on line 0
  • PHP Notice: Trying to get property of non-object in �5� on line 352
  • Unsuccessful logout. Status was: exception 'sspmod_saml_Error' with message 'Requester' in

我认为上述大多数(如果不是全部)错误都是由于SSP和会话中的一些奇怪状态造成的,通常不会出现。所以我的新问题更简单:

是否有人使用store.type = 'sql'和SQLite成功配置了SSP 1.14.2?我可以看到正在创建的sqlite文件以及其中的几个表,但SSP总是返回“无状态”错误。我相信将商店更改为SQL将解决我的问题......

干杯

1 个答案:

答案 0 :(得分:4)

我知道这个问题似乎到处都是,非常混乱......想象看日志:)

现在,在 jaimeperez - github上的SSP(SimpleSamlPhp)开发人员的帮助下,我们将其分解为多个“更简单”的问题:

  1. 会话共享:当应用程序和SSP都使用$_SESSION时,您必须:

    • 使用最近发布的SSP 1.14.3为此类案例提供修复
    • 为会话命名。在您的应用程序中,在致电session_name("XYZ")之前使用session_start(),并在SSP的config.php中为session.phpsession.cookiename设置一个非默认值。根据我的测试,两者都必须是非默认的(不是“PHPSESSID”)。自动启动会话的php.ini选项可能会影响该值(即:如果设置为false,则两者中的一个可以使用默认值 - 未经测试)
  2. 版本5.4.16中的PHP错误引起的错误。这使得PHP SegFault使SSP处于错误状态。这与SSP无关,主要是RHEL / Centos 7和PHP的问题。这解决了错误:

    • Allowed memory size of X bytes exhausted ... in Unknown on line 0
    • PHP Warning: Unknown: Could not call the sapi_header_callback in Unknown on line 0
    • PHP Notice: Trying to get property of non-object in �5� on line 352(或类似的!每次都有所不同!但这是指向Session.php第352行的错误 - 这似乎也完全无关紧要)

    这个解决方案是升级PHP。根据我的阅读,问题在5.4.20和5.5.2(TBC)

  3. 中得到修复
  4. 错误Unsuccessful logout. Status was: exception 'sspmod_saml_Error'...是由于IdP拒绝为我提供服务,因为我登录和退出的次数太多,而且作为测试的一部分太快

  5. 我通常用“我希望这会有所帮助”这句话来结束我的回答......但是在这种情况下我真的希望你不会遇到类似的情况:)希望,问题和这个答案包含足够的关键字来使谷歌点在这......

    如果您想关注此会话,可以github

    执行此操作