我第一次尝试运行Shibboleth SP,但是我立即遇到了三天来我都不了解的问题:/
我首先使用docker映像unicon/shibboleth-sp
作为基础。
到目前为止,我刚刚在两个地方修改了shibboleth2.xml
。我在entityID
部分中写了一个特定的IdP <SSO>
,并添加了一个<MetadataProvider>
,它指向包含IdP元数据的外部XML文件。
恕我直言,当我尝试访问SP上受保护的URL时,应该足以重定向到IdP。但是,相反,我得到了Shibb异常No MetadataProvider available
。
这些是我对shibboleth2.xml
所做的更改:
<ApplicationDefaults entityID="https://sp.example.org/shibboleth" ... >
...
<Sessions ... >
...
<!--
Configures SSO for a default IdP. To properly allow for >1 IdP, remove
entityID property and adjust discoveryURL to point to discovery service.
You can also override entityID on /Login query string, or in RequestMap/htaccess.
-->
<SSO entityID="https://testidp.aai.dfn.de/idp/shibboleth"
discoveryProtocol="SAMLDS" discoveryURL="http://www.aai.dfn.de/DS/WAYF">
SAML2
</SSO>
...
</Sessions>
...
<MetadataProvider type="XML" id="dfn-aai-test-metadata"
url="http://www.aai.dfn.de/fileadmin/metadata/dfn-aai-test-metadata.xml"
backingFilePath="federation-dockermeta-metadata.xml" maxRefreshDelay="3600">
<MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
<MetadataFilter type="Signature" certificate="/etc/ssl/aai/dfn-aai.g2.pem" verifyBackup="false"/>
</MetadataProvider>
...
</ApplicationDefaults>
经过数天的调试,现在我可以确定SP可以正确解析<MetadataProvider>
标记,但似乎完全忽略了它。
将日志级别设置为DEBUG
表示MetadataProvider已解析(其XML结构在日志输出中可见),但是它不会尝试访问URL。甚至没有针对www.aai.dfn.de
的DNS请求,也没有尝试访问URL。另外,日志中没有错误。甚至没有暗示它试图在日志中加载外部元数据。尝试访问受保护的资源后,我在日志文件中遇到的第一个也是唯一的错误是No MetadataProvider available
。
我以前从未设置过Shibboleth SP(因为每个人都告诉我它是PITA)。我不确定Shibboleth SP或docker映像是否有问题。很可能是我的问题,我只是想念一些很明显的东西...
我需要帮助:)
我使用的完整代码可以在这里找到: https://gitlab.com/xsrf/shibb-sp/tree/5380f4550ac1a5ffb47d96138d837f1cf6acdb60
答案 0 :(得分:1)
当我看到这通常是权限问题...即正在运行shibd
进程的用户既无权访问元数据文件(在这种情况下更可能是用于访问权限文件的权限)验证)。我认为仅在Dockerfile中执行docker add
对于该目标是不够的,因为shibd无法读取/etc/ssl/aai/
。
我不得不提取您的存储库,然后自己尝试确定要执行的操作,但是似乎很容易将证书放入/etc/shibboleth
中。 shibd
可以读取该目录。
编辑:除了权限问题外,它似乎无法下载该元数据...我通过添加
更正了权限问题RUN chown -R shibd:shibd /etc/shibboleth/
RUN chown -R shibd:shibd /var/cache/shibboleth/
到您的Dockerfile。
现在,当我尝试测试配置时,我会看到此错误:
root@ac4861a1faae shibboleth]# /usr/sbin/shibd -t
2019-10-03 16:51:39 CRIT XMLTooling.Config : libcurl lacks OpenSSL-specific options, this will greatly limit functionality
2019-10-03 16:51:39 WARN Shibboleth.Application : insecure cookieProps setting, set to "https" for SSL/TLS-only usage
2019-10-03 16:51:39 WARN Shibboleth.Application : handlerSSL should be enabled for SSL/TLS-enabled web sites
2019-10-03 16:51:39 ERROR XMLTooling.libcurl.InputStream [dfn-aai-test-metadata]: error while fetching http://www.aai.dfn.de/fileadmin/metadata/dfn-aai-test-metadata.xml: (22) The requested URL returned error: 404 Not Found
2019-10-03 16:51:39 ERROR XMLTooling.ParserPool [dfn-aai-test-metadata]: fatal error on line 0, column 0, message: internal error in NetAccessor
2019-10-03 16:51:39 ERROR OpenSAML.MetadataProvider.XML [dfn-aai-test-metadata]: error while loading resource (http://www.aai.dfn.de/fileadmin/metadata/dfn-aai-test-metadata.xml): XML error(s) during parsing, check log for specifics
2019-10-03 16:51:39 WARN OpenSAML.MetadataProvider.XML [dfn-aai-test-metadata]: adjusted reload interval to 600 seconds
2019-10-03 16:51:39 WARN OpenSAML.MetadataProvider.XML [dfn-aai-test-metadata]: trying backup file, exception loading remote resource: XML error(s) during parsing, check log for specifics
2019-10-03 16:51:39 ERROR XMLTooling.ParserPool [dfn-aai-test-metadata]: fatal error on line 0, column 0, message: unable to open primary document entity '/var/cache/shibboleth/federation-dockermeta-metadata.xml'
2019-10-03 16:51:39 ERROR OpenSAML.MetadataProvider.XML [dfn-aai-test-metadata]: error while loading resource (/var/cache/shibboleth/federation-dockermeta-metadata.xml): XML error(s) during parsing, check log for specifics
2019-10-03 16:51:39 CRIT Shibboleth.Application : error initializing MetadataProvider: XML error(s) during parsing, check log for specifics
overall configuration is loadable, check console or log for non-fatal problems
而且,可以肯定的是……尝试对来自Docker容器的URL进行CURL失败:
[root@ac4861a1faae shibboleth]# curl http://www.aai.dfn.de/fileadmin/metadata/dfn-aai-test-metadata.xml
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
即使它是从我的本地计算机成功执行的。使用静态文件可以正常工作,请参见:https://i.imgur.com/gXxC7z9.png,对于实际上未与该IdP集成的SP,我基本上希望看到它。
所以,问题出在我认为的docker网络中。
编辑#2:不,只是杀死了您的虚拟Web服务器,但我不知何故未连接正在运行,并且运行正常。就像我说的那样,这是一个权限。将这两行RUN
添加到Dockerfile的末尾,它应该可以工作。