本地WSO2 IS配置外部WSO2 IS做OIDC联合认证遇SSL错误求助
问题分析与解决方案
问题描述
在本地WSO2 Identity Server(IS)中为服务提供商配置OIDC联合认证,外部身份提供商同样为WSO2 IS。完成以下配置步骤后:
- 在外部WSO2 IS中完成入站认证配置
- 在本地WSO2 IS中配置身份提供商,并完成角色映射与声明映射
- 更新本地服务提供商的联合认证配置
访问应用时可正常跳转至外部提供商认证,但输入凭证后浏览器返回错误:
Request URL: https://test-vm.com/?error_description=Authentication+required&error=login_required
Payload: error_description: Authentication required、error: login_required
查看本地WSO2 IS日志,发现核心错误:
ERROR {org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler} - Authentication failed exception! javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
核心原因
本地WSO2 IS的JVM信任库中未添加外部WSO2 IS的SSL证书,导致本地IS在与外部IS进行回调通信时,无法验证对方证书的合法性,触发SSL握手失败,最终引发认证流程中断,返回login_required错误。
解决步骤
导出外部WSO2 IS的SSL证书
- 打开浏览器,访问外部WSO2 IS的管理控制台(如
https://<外部IS域名>:9443/carbon) - 点击浏览器地址栏的锁形图标,查看证书详情,将证书导出为
.cer或.pem格式的文件(可选DER或PEM编码)
- 打开浏览器,访问外部WSO2 IS的管理控制台(如
将证书导入本地WSO2 IS的信任库
- 找到本地WSO2 IS的信任库路径,默认位于
<WSO2_IS_HOME>/repository/resources/security/client-truststore.jks - 使用Java的
keytool命令导入证书,命令示例:keytool -importcert -file <导出的证书文件路径> -alias external-is-cert -keystore <WSO2_IS_HOME>/repository/resources/security/client-truststore.jks -storepass wso2carbon - 执行命令后,输入
yes确认信任该证书
- 找到本地WSO2 IS的信任库路径,默认位于
重启本地WSO2 IS服务
- 停止当前运行的本地WSO2 IS实例
- 重新启动服务,使信任库的变更生效
验证配置
- 再次访问联合认证应用,完成外部IS的凭证输入后,检查是否能正常完成认证流程,不再返回
login_required错误 - 查看本地WSO2 IS日志,确认无SSL握手相关的错误信息
- 再次访问联合认证应用,完成外部IS的凭证输入后,检查是否能正常完成认证流程,不再返回
内容的提问来源于stack exchange,提问作者Devaddy
相关产品推荐
相关产品推荐

