Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
minLevel1
maxLevel7

...

首先,建议您先搜索本文档,确认要提的问题是否已有答案。提问前请准备好以下信息:

  1. 您的身份(学校CARSI管理员、CARSI用户-学生、CARSI用户-老师、等),您所在的单位(如:北京大学,计算中心,张三)

  2. 您正在做的事情、背景或进展(如:我校的会员单位申请刚刚审批通过,我目前正在部署IdP,参考的是wiki上的“脚本方式安装部署CARSI IdPv4.1.4”的步骤,现在做到了第7步;我校IdP之前已上线,近期打算从3.4.7升级到4.1.4,打算使用新的环境重新安装,并把现有的metadata及证书迁移到新环境,现在做到了第8步)

  3. 出问题的步骤(如:已经配置好了“对接校园网认证系统”,对接的是XX公司的CAS系统,在预上线环境测试时发现输入用户名密码,以及弹出是否同意释放用户属性的提示框都通过了,但是跳转到SP时报错了,错误见截图)。

  4. 做过哪些尝试(如:试过清除浏览器缓存,重新测试问题依旧;看过idp-process.log的日志,但是没有任何ERROR信息;试过使用浏览器的F12看了一下请求的链路,发现了一些奇怪的请求……)。

  5. 发送系统错误截图或者访问过程录屏:需要截图清晰、可看清错误信息,截图包含浏览器url,录屏过程完整。

  6. 其它您分析的可能原因,便于排查问题(如机房昨日断电,所有系统都重启了;上周调整了网络策略……)

申请和上线流程

1. 什么是CARSI,能解决什么应用问题?

...

        若学校IdP状态为“已上线”,需先发送邮件到carsi@pku.edu.cn申请将状态撤回到“调试中”,然后在自服务系统中进行修改并重新上传metadata。在预上线环境(“调试中”状态)确认更改生效后,重新向carsi@pkucn申请将状态撤回到“调试中”,然后在自服务系统中修改英文名称,并重新上传metadata。在预上线环境(“调试中”状态)确认更改生效后,重新向carsi@pku.edu.cn发送上线申请。收到正式上线邮件后,在CARSI线上metadata中再次确认线上环境的更改已生效(有10分钟延迟):https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml。完成更改。

...

之后您需要登录自服务系统https://mgmt.carsi.edu.cn/ ,在“已采购资源的”勾选并保存贵校可以使用的资源,保存后1小时内在 ,在“可访问资源”列表中勾选并保存贵校可以使用的资源,保存后1小时内在https://ds.carsi.edu.cn 生效。之后贵校师生即可通过CARSI资源门户https://ds.carsi.edu.cn 访问资源了。

...

首先确认本机hostname已经改成了域名。如果没有,请按照下述步骤进行修改,修改完成后重启服务器。

[root@www ~]# hostnamectl set-hostname idp.xxx.xxx.xxx 

或者,也可以在安装过程中输入主机域名idp.xxx.xxx.xxx。

Installation Directory: [/opt/shibboleth-idp]
Hostname: [localhost.localdomain] #直接输入主机域名


3. idp安装运行关键log文件包括哪些?

请参考脚本方式安装部署CARSI IdP步骤第6步具体内容。

...

方法一(推荐):修改/opt/shibboleth-idp/conf/logback.xml日志级别

<!-- Logging level shortcuts. -->
<variable name="idp.loglevel.idp" value="${idp.loglevel.idp:-INFO}" />      <!-- idp运行日志级别 -->
<variable name="idp.loglevel.ldap" value="${idp.loglevel.ldap:-WARN}" />     <!-- LDAP相关日志级别 -->
<variable name="idp.loglevel.messages" value="${idp.loglevel.messages:-INFO}" />     <!-- 追踪协议数据日志级别 -->
<variable name="idp.loglevel.encryption" value="${idp.loglevel.encryption:-INFO}" />     <!-- 数据加密追踪日志级别 -->
<variable name="idp.loglevel.opensaml" value="${idp.loglevel.opensaml:-INFO}" />     <!-- OpenSAML日志级别 -->
<variable name="idp.loglevel.props" value="${idp.loglevel.props:-INFO}" />     <!-- 性能分析日志级别 -->
<variable name="idp.loglevel.httpclient" value="${idp.loglevel.httpclient:-INFO}" />     <!-- httpclient运行日志级别 -->
 
<!-- Don't turn these up unless you want a *lot* of noise. -->
<variable name="idp.loglevel.spring" value="${idp.loglevel.spring:-ERROR}" />     <!-- Spring框架日志级别(数据量特别大) -->
<variable name="idp.loglevel.container" value="${idp.loglevel.container:-ERROR}" />     <!-- Tomcat/jetty日志级别(数据量特别大) -->
<variable name="idp.loglevel.xmlsec" value="${idp.loglevel.xmlsec:-INFO}" />     <!-- XML签名或加密日志级别 -->

可以根据需要修改相应参数。测试完成之后,务必将日志级别恢复默认,否则日志量太大,容易造成硬盘空间不足。

一般将idp.loglevel.idp和idp.loglevel.messages改成DEBUG就可以看到用户属性情况了。messages中的INFO改成DEBUG就可以看到用户属性情况了。

修改后还须执行/opt/shibboleth-idp/bin/build.sh重新构建一下IdP,然后重启jetty使其生效。


方法二:如果正好需要用script映射该属性,则可以直接在script中加logger,会以INFO级别打印到日志中,比如:

<Script><![CDATA[
logger = Java.type("org.slf4j.LoggerFactory").getLogger("net.shibboleth.idp.attribute");
logger.info("Value of

employeetype

employeeType is : {}",

employeetype

employeeType.getValues().get(0));
var localpart = "";
if(employeetype.getValues().get(0)=="staf") localpart = "staff";
else if(employeetype.getValues().get(0)=="std") localpart = "student";
else localpart = "other";
eduPersonScopedAffiliation.addValue(localpart + "@%{idp.scope}");
    ]]></Script>

日志中会打印:

2020-02-08 15:15:30,293 - 222.29.104.246 - INFO [net.shibboleth.idp.attribute:2] - Value of employeetype is : faculty

...

另外,在调试过程中,有时候需要打开插件的DEBUG模式,在logback.

...

修改任意xml配置文件后,需要重启jetty(systemctl restart jetty)使配置生效。

如果修改了jar包,则需要进入xml 中加入下面语句,可以打开插件的debug信息,进行错误分析调试,注意,不同的插件使用不同的语句,另外,测试完成后,需要去掉,或者注释掉这些语句。

修改后还须执行/opt/shibboleth-idp/bin,执行.bin/build.sh,然后重启jetty。

重启jetty后,请重新打开无痕窗口进行测试,原先如果已经打开无痕窗口,需先关闭。

9. 配置了日志采集后,为什么在自服务系统https://mgmt.carsi.edu.cn中看不到数据?

一般配置日志采集后,需要等2个小时左右,才能在系统中查看到访问的情况。

如果时间超过两个小时仍无数据,请参考IdP4:检查日志功能是否正常 检查日志功能是否正常。

10. SP厂商报某个用户出现了异常访问(比如下载了大量的数据),如何定位到具体的用户?

根据https://www.carsi.edu.cn/docs/attribute_profile_zh.pdf,我们建议将pairwise-id(4.1.4新加)或eduPersonTargetedID作为用户唯一永久id向所有CARSI SP释放。这两个属性对应同一个IdP内部属性:persistentId(后续描述时统一使用persistentId)。自IdP 3.4.7安装脚本开始,默认安装Mariadb数据库(MySQL),存放persistentId与用户校园真实id(如学工号)的映射关系。管理员可在Mariadb中查看。表格式参见:请参考脚本方式安装部署CARSI IdP具体步骤第4步。通过数据库永久保留CARSI对外释放用户id和校园真实id对应关系,具有如下几点优势:

  • 释放persistentId,可为SP提供精细化、面向个人的服务提供用户唯一标识,同时不泄露用户个人隐私信息;

  • 符合至少保留最近180天运行日志的安全运行要求;

  • 便于出现恶意使用后及时进行用户定位;

  • 将每次访问时自动生成persistentId替换成第一次访问时自动生成并存库、以后从库中读取的方式,运行效率高。

IdP3.4.3提供的可在访问时动态生成persistentId的方式建议修改成通过Mariadb存放。

...

sh重新构建一下IdP,然后重启jetty使其生效。

<!-- CAS -->
<logger name="net.unicon.idp.externalauth" level="DEBUG" />
<logger name="org.jasig.cas.client.validation" level="DEBUG" />

<!-- 其它插件(OAuth/企业微信/腾讯微校):-->
<logger name="cn.edu.carsi.idp.externalauth" level="DEBUG" />

8. 修改配置后,如何重启IdP以及如何测试?

修改任意xml配置文件后,需要重启jetty(systemctl restart jetty)使配置生效。

如果修改了jar包,则需要进入/opt/shibboleth-idp/bin,执行./build.sh,然后重启jetty。

重启jetty后,请重新打开无痕窗口进行测试,原先如果已经打开无痕窗口,需先关闭。


9. 配置了日志采集后,为什么在自服务系统https://mgmt.carsi.edu.cn中看不到数据?

一般配置日志采集后,需要等2个小时左右,才能在系统中查看到访问的情况。

如果时间超过两个小时仍无数据,请参考IdP4:检查日志功能是否正常 检查日志功能是否正常。


10. SP厂商报某个用户出现了异常访问(比如下载了大量的数据),如何定位到具体的用户?

根据https://www.carsi.edu.cn/docs/attribute_profile_zh.pdf,我们建议将pairwise-id(4.1.4新加)或eduPersonTargetedID作为用户唯一永久id向所有CARSI SP释放。这两个属性对应同一个IdP内部属性:persistentId(后续描述时统一使用persistentId)。自IdP 3.4.7安装脚本开始,默认安装Mariadb数据库(MySQL),存放persistentId与用户校园真实id(如学工号)的映射关系。管理员可在Mariadb中查看。表格式参见:请参考脚本方式安装部署CARSI IdP具体步骤第4步。通过数据库永久保留CARSI对外释放用户id和校园真实id对应关系,具有如下几点优势:

  • 释放persistentId,可为SP提供精细化、面向个人的服务提供用户唯一标识,同时不泄露用户个人隐私信息;

  • 符合至少保留最近180天运行日志的安全运行要求;

  • 便于出现恶意使用后及时进行用户定位;

  • 将每次访问时自动生成persistentId替换成第一次访问时自动生成并存库、以后从库中读取的方式,运行效率高。

IdP3.4.3提供的可在访问时动态生成persistentId的方式建议修改成通过Mariadb存放。


11. LDAP 不是很明白如何配置?

ldap 配置时, 主要是以下这些参数,请重点关注。

  1. idp.authn.LDAP.authenticator = bindSearchAuthenticator :  认证的模式选 bindSearchAuthenticator,除非明确了解另外几个模式的含义,否则都应该配置这个

  2. idp.authn.LDAP.baseDN : 开始 ldap 查询的 basedn,向 ldap 管理员索取

  3. idp.authn.LDAP.bindD 和 idp.authn.LDAP.bindDNCredential : 一个有搜索权限的 ldap 账号,向 ldap 管理员索取

  4. idp.authn.LDAP.subtreeSearch = true :  除非所有的用户都只落在 basedn 上,否则必须开启子树的查询,不然递归不下去

  5. idp.authn.LDAP.userFilter = (uid={user}) : 用户输入的用户名,对应在 ldap 里的属性,查询时根据这个属性去查。通常 ldap 里应该是 uid 或者 cn,ad 里则是 sAMAccountName

  6. idp.attribute.resolver.LDAP.searchFilter : 同上

具体配置参见:请参考脚本方式安装部署CARSI IdP具体步骤之对接LDAP服务器。

...

12. IdP报不支持的请求错误:Unsupported Request: The application you have accessed is not registered for use with this service.

...

该错误一般是由于IdP无法识别正在访问的SP,本地IdP没有下载CARSI联盟的metadata文件导致的。CARSI联盟提供了测试环境(预上线环境)和正式环境(线上环境)共2种环境的联盟metadata,联盟metadata其中包含了当前环境中所有可供使用的SP的metadata信息,IdP只能为当前环境的SP提供认证服务,如果用户要访问的SP的metadata不在学校IdP服务器中联盟metadata文件中则会出现这样的错误。此问题可能有以下几种情况:

...

网络问题(通常是28天左右突然出现该错误):确认是否已将联盟的metadata文件下载到了/opt/shibboleth-idp/metadata目录。可能由于网络等原因,贵校IdP无法下载联盟的metadata文件导致的,如果学校禁止服务器访问外网则会导致服务器更新metadata文件失败,需要开放服务器访问外网的权限,或至少允许服务器访问https://www.carsi.edu.cn网站。此时可以手工下载一下改文件,然后重启IdP试试。网站。此时可以手工下载一下该文件,然后重启IdP试试。

为什么是28天左右容易出问题?https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml为例,头部有一个validUntil字段,代表该联盟metadata的失效时间,按照eduGAIN的要求不能超过30天,CARSI的策略是每次生成该文件更新这个有效期到28天以后。贵校如果有一段时间IdP运行是好的,过了28天左右出了问题,很有可能就是贵校拿到的CARSI联盟的metadata已经过期失效了。网络问题可能是在这28天中的任何时间发生的,但是IdP还是运行了一段时间(注意这段时间新添加到CARSI联盟中的SP其实贵校是认不到的)。

...

19. IdP升级到414后,某些SP无法正常访问,如何解决?

IdP414默认使用GCM方法进行idp和sp之间的传输加密,与老版本CDC方法相比,安全性更高。某些SP因为版本原因不支持GCM会导致IdP14用户访问异常。IdP414默认使用GCM方法进行idp和sp之间的传输加密,与老版本CBC方法相比,安全性更高。某些SP因为版本原因不支持GCM会导致IdP14用户访问异常。

解决办法:

  1. 升级SP支持GCM加密方式。此方法为最佳方法,推荐采用。

  2. SP升级自己的metadata数据,在metadata数据中指定目前可支持的加密方式。IdP可在通信过程中,根据SP的此项设置,自动适配。

IdP端临时解决办法:

  1. 登录idp414服务器

  2. 编辑conf/metadata-providers.

...

  1. xml配置文件,增加<MetadataFilter>,单独配置某SP的加密方法为CBC,(复制下面红色部分配置信息,注意修改SP entity ID):

    <MetadataProvider id="HTTPMetadata"
         xsi:type="FileBackedHTTPMetadataProvider"
         backingFile="/opt/shibboleth-idp/metadata/carsifed-metadata.xml"
         minRefreshDelay="PT5M"
         maxRefreshDelay="PT10M"
         metadataURL="https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml">
        <MetadataFilter xsi:type="SignatureValidation" certificateFile="/opt/shibboleth-idp/credentials/dsmeta.pem" />
        <MetadataFilter xsi:type="EntityRoleWhiteList">
            <RetainedRole>md:SPSSODescriptor</RetainedRole>
        </MetadataFilter>

        <MetadataFilter xsi:type="Algorithm">
                <!-- CBC-only SPs. -->
                <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
               <Entity><https://sp entity id1</Entity>
<Entity><https://sp entity id2</Entity>
        </MetadataFilter>

   </MetadataProvider>

20. IdP安装配置时,预上线环境测试显示登陆成功,但释放属性部分显示为空,这个一般是什么原因?

...

Status: urn:oasis:names:tc:SAML:2.0:status:Requester
Sub-Status: urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
Message: An error occurred.

问题分析:

  1. 查看idp-process.log, 检查是否有以下错误:
    2022-07-15 11:31:29,165 - 192.168.xx.xxx - ERROR [org.jasig.cas.client.util.CommonUtils:439] - SSL error getting response from host: cas-pass.XXXX.edu.cn : Error Message: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
    Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.base/sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:102)
    Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.base/java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
    2022-07-15 11:31:29,166 - 192.168.70.235 - ERROR [net.unicon.idp.externalauth.ShibcasAuthServlet:111] - Ticket validation failed, returning InvalidTicket
    java.lang.RuntimeException: javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:440)

  2. 如果有以上错误,请检查CAS认证服务网站数字证书,通常因其证书不完善导致报错。

解决办法:

请学校认证服务器更新完善数字证书。

注:www.myssl.com提供免费网站数字证书检测服务。

...

除需要操作系统运行正常外,IdP的运行依赖于Nginx、Jetty以及IdP软件自身的正常运行,检查步骤如下:

...

  1. 使用systemctl status nginx命令检查Nginx状态是否正常,如果输出如下图所示 active (running),则nginx运行正常。

    Image Modified

  2. 使用systemctl status jetty命令检查Jetty状态是否正常,如果输出如下图所示 active (running),则Jetty运行正常。

...


  1. Image Added
  2. 使用浏览器打开https://XXX.XXX.edu.cn/idp/shibboleth ,注意使用学校IdP服务器域名替代XXX.XXX.edu.cn,如果能够看到本校IdP服务器的metadata文件,则IdP服务器运行状态正常。

24. 当访问ds.carsi.edu.cn,选择认证学校时,我校名称右边显示红色或黄色的三角形提醒符号标记,是什么原因?

CARSI联盟上线了学校IdP服务器运行状态监测软件,会每隔1小时监测一次学校IdP服务器运行状态,监测方式是通过curl方式查看学校IdP服务器metadata文件,如果学校IdP服务器网络链接状态不正常或不能正常查看metadata文件,则在认证学校选择列表中会用红色或黄色三角提醒符号标识。监测软件每小时运行一次,当学校IdP服务器运行恢复正常后,1小时内提示现象就会消失。详细情况,可以查看Idp服务监测的说明

25. 关于IdP证书异常

1、如果是https证书异常:证书不是商业证书,或者证书过期,浏览器如下图提示:

...

请为IdP购买并配置正确的https证书,配置好以后请使用在线工具检查一下证书,如:https://www.ssllabs.com/ssltest/index.html

2、如果是IdP用于加密或签名的证书被报异常(通常该错误出现在SP网站上):

首先从提交给CARSI联盟的IdP metadata文件中获取到对应的证书字符串(<ds:X509Certificate>),默认安装的Shibboleth IdP会有3种证书(2个用于backchannel/frontchannel的签名,1个用于加密)。然后将其格式化为openssl可以识别的格式(即带前后-----BEGIN CERTIFICATE----- 和-----END CERTIFICATE----- headers的格式,可以使用在线工具如https://

...

www.

...

samltool.

...

24. 当访问ds.carsi.edu.cn,选择认证学校时,我校名称被虚标显示,是什么原因?

CARSI联盟最近上线了学校IdP服务器运行状态监测软件,会每隔1小时监测一次学校IdP服务器运行状态,监测方式是通过curl方式查看学校IdP服务器metadata文件,如果学校IdP服务器网络链接状态不正常或不能正常查看metadata文件,则在认证学校选择列表中会被虚标。监测软件每小时运行一次,当学校IdP服务器运行恢复正常后,1小时内这虚标现象就会消失。com/format_x509cert.php 完成这一步格式化的工作),将结果存为证书crt文件。

然后使用openssl查看该证书的信息(如issuer、过期时间等信息):openssl x509 -in signing.frontchannel.crt -text -noout 确认一下证书的信息中有无异常项(如证书已经过期了),如果未发现问题,请联系报错的SP确认一下具体的错误。

例:某学校报在访问某SP资源时,认证通过后,在其网站上提示下图中的警告信息,点击“continue”后还是可以正常访问的:

Image Added

经查上述方法可以查看到该校IdP的证书是正常的:

...

建议学校与SP了解一下问题的详细情况,然后再确认解决方案。