simpleSAMLphp SP 元数据返回 http 的 entityID 而不是预期的 https

simpleSAMLphp SP metadata returning entityID of http instead of expected https

我目前在 CentOS 服务器上安装了一个 simplesamlphp 作为服务提供者。我将 config/authsources.php 定义如下:

'default-sp' => array(
    'saml:SP',
    'entityID' => null,

当我通过 https 访问 /saml/ url 并导航到 'Federation' 选项卡时,即: https://my.sp/saml/module.php/core/frontpage_federation.php

我注意到返回的实体 ID 是 'http' 而不是 'https'(我希望这是 https)。它显示以下内容:

SAML 2.0 SP Metadata
Entity ID: http://my.sp/saml/module.php/saml/sp/metadata.php/default-sp
default-sp
[ Show metadata ]

然后当我单击 'Show metadata' link 访问 URL https://my.sp/saml/module.php/saml/sp/metadata.php/default-sp?output=xhtml(注意 url 是正确的 https)时,元数据 XML 再次为 entityID 和位置返回意外的 'http' urls 而不是 'https' urls。请注意以下来自 XML 的摘录:

<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="http://my.sp/saml/module.php/saml/sp/metadata.php/default-sp">
    -- SNIP --
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://my.sp/saml/module.php/saml/sp/saml2-logout.php/default-sp"/>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://my.sp/saml/module.php/saml/sp/saml2-acs.php/default-sp" index="0"/>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post" Location="http://my.sp/saml/module.php/saml/sp/saml1-acs.php/default-sp" index="1"/>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="http://my.sp/saml/module.php/saml/sp/saml2-acs.php/default-sp" index="2"/>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:artifact-01" Location="http://my.sp/saml/module.php/saml/sp/saml1-acs.php/default-sp/artifact" index="3"/>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

与远程 IdP 共享元数据时,这似乎会导致问题。所以我的问题是,为什么它返回 http 而不是 https,有没有办法解决这个问题?我选择不对 entityID 进行硬编码,因为我有 2 个单独的子域访问单个 SP,因此认为允许当前使用的 url 来指示它是有意义的(这对其他安装有效)。任何帮助将不胜感激。

您的实体 ID 应该是 https:// in /apps/simplesamlphp/config/authsources.php 元数据 XML 再次返回意外的 http url 而不是 https url 的原因是因为您可能没有生成证书,您将不得不创建一个自我-cert/ 目录中的签名证书,如果未创建..

我在 moodle 中使用 auth_saml2 插件时遇到了同样的情况。 当我按照 link 在我的 Centos 中安装和配置 simpleSAML php https://simplesamlphp.org/docs/stable/simplesamlphp-sp Federation 选项卡显示 SP 元数据返回给我 https:// 但是当我为 moodle 应用程序使用相同的插件时,SP 元数据返回 http:// 而不是 https:// 所以我从 auth_saml2 插件重新生成了证书,然后 SP 元数据返回给我 https

仅供参考 - entityID 可能看起来像 URL,但它不是。它只是一个标识符。所以 http 与 https 对最终用户体验绝对没有影响。您可以拥有几乎任何您想要的字符串的 entityId。 SimpleSamlPHP 正在为您生成 entityID,因为您的元数据文件指定了动态 entityID。这使得 SSP 根据有关请求和授权源 ID 的许多事情生成一个 entityID。我建议使用静态 entityID。如果用于生成元数据的请求通过不同的方案(http 与 https)或名称(DNS 名称、IP 地址或别名)访问您的服务器,则元数据中的 entityID 将不同,您的 SAML 交互可能无法按预期工作。

我能够通过确保 config.php 中的 'baseurlpath' 是 HTTPS 来解决这个问题。