我想知道如果您通过一个反向代理(使用 SSL 卸载等)将请求传递到所有站点,是否可以只有一个 Shibboleth 服务提供商 (SP)。
假设我在不同的域名有以下网站:
example.org
blog.example.org
wiki.example.org
这些网站本身及其各自的 Web 服务器都驻留在自己的 VM 中,无法直接与外部通信。我有另一台 VM,它只为所有这些域运行反向代理,并将请求传递到相应 VM 上的 Web 服务器。我们将其称为反向代理proxy.example.org
(请注意,这不是一个可访问的域名)。
现在,我不再为每个站点配置一个 SP proxy.example.org
,而是只在
example.org/secure
blog.example.org
wiki.example.org
将触发 Shibboleth 身份验证。身份验证成功后,请求将被传递。这可能吗?
我问是因为我只找到了这个资源https://wiki.shibboleth.net/confluence/display/SHIB2/SPReverseProxy我觉得这很含糊,因为它只说
- 位置/安全资源受到 Shibboleth SP 的保护
- Shibboleth SP 拦截该请求并生成一个 SAML2 AuthnRequest,其 AssertionConsumerServiceURL 为 https://代理服务器/Shibboleth.sso/SAML2/POST
所以我真的不知道 SP 必须安装在哪里......
答案1
是的,这是可能的。几年前我配置了一个 Shib 代理。这是我当时写的所有文档(它是 Solaris 上的设置,Linux 上的某些内容可能有所不同)。您将需要一个服务器来保存您要保护的应用程序以及一个带有 Shibboleth 内容和一些代理规则的代理服务器。
- 安装区域(或 Linux 服务器)(将用作 Shibboleth 代理)
- 编译 Shib Daemon(或者直接在 Linux 上安装)
- 在 IDP Shib AAI 注册表中注册主机
- 检查守护进程配置:
shibd -t -c /opt/AAI/etc/shibboleth/shibboleth2.xml
- 安装守护程序后,我们必须将其配置为“代理”使用。但首先,我们要测试我们的初始设置。打开文件 shibboleth2.xml 并在文件中查找错误的 URL。所有内容都应指向您的站点。搜索
Handler type="Status"
并删除末尾的 ACL。您的处理程序应如下所示:<Handler type="Status" Location="/Status" />
- 现在你可以将浏览器指向状态页面,http://DOMAIN/Shibboleth.sso/Status。如果您看到 XML 输出,则一切正常。如果没有,请检查您的 shibboleth 配置。
- 现在转到 Apache Web 服务器:测试单个 php 或 html 文件以确保 Apache 正常工作。设置要使用代理保护的应用程序(这将位于不同的服务器上)。不要忘记编辑防火墙并允许从 (AAI) 代理访问 Web 服务器。
- 现在我们添加一个新服务(这在 AAI 代理上完成):
- 创建指向 shibboleth (aai) 代理服务器的新 CNAME
- 通过 ssh 登录 aai 代理服务器
- 编辑 shibboleth2.xml:添加新的应用程序覆盖。复制此存根
<ApplicationOverride id="<APP NAME>" entityID="https://<DOMAIN>/shibboleth" />
- 替换 APP NAME 和 DOMAIN
- 编辑 /opt/csw/apache2/etc/extra/httpd-vhosts.conf(在 Linux 上会有所不同)
- 添加新的虚拟主机。
复制此存根
NameVirtualHost IPADDR:80 <VirtualHost IPADDR:80> ServerName DOMAIN ServerAdmin [email protected] Redirect / https://DOMAIN/ ErrorLog var/log/aai.error.log CustomLog var/log/aai.access.log common </VirtualHost> <VirtualHost IPADDR:443> ServerName DOMAIN ServerAdmin [email protected] # The Shibboleth handler shall process all HTTPS requests... <Location /> Order deny,allow Allow from all AuthType shibboleth ShibRequestSetting applicationId APPNAME ShibUseHeaders On Require shibboleth </Location> # ...but only enforce a Session for the location below. <Location /secure> AuthType shibboleth ShibRequireSession On ShibRequestSetting applicationId APPNAME ShibUseHeaders On Require valid-user </Location> SSLEngine On SSLCertificateFile etc/server.crt SSLCertificateKeyFile etc/server.key SSLCertificateChainFile etc/server-ca.crt SSLProxyEngine on ProxyRequests off ProxyPass /secure https://WEBSERVERURL ProxyPassReverse /secure https://WEBSERVERURL ProxyPreserveHost On ErrorLog var/log/APPNAME.error.log CustomLog var/log/APPNAME.access.log common </VirtualHost>
替换 APP NAME、WEBSERVER URL、IP ADDR 和 DOMAIN,您还必须更改设置路径。
重新启动 apache 和 shibd
享受