You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android LDAP客户端EXTERNAL绑定失败:服务器未通过TLS获取凭据

问题:LDAP EXTERNAL绑定(startTLS方式)失败,报错80090317

Android应用使用UnboundID LDAP SDK连接LDAP服务器,流程为:初始匿名非SSL连接→启动startTLS→执行EXTERNAL绑定(依赖TLS握手时的客户端证书)。近期EXTERNAL绑定失败,报错:

"80090317: The server did not receive any credentials via TLS, data 0, v2580"

期间应用、Android平台及服务器均未做变更,已确认客户端与服务器证书有效,且通过HandshakeCompletedListener验证TLS握手已完成、证书交换成功。

代码示例

// 连接服务器 - 匿名登录,非SSL
LDAPConnection mConn = new LDAPConnection(address, port, "", "", null);

// 启动TLS
KeyManager km = (...);
SSLUtil sslUtil = new SSLUtil(km, new TrustAllTrustManager());
StartTLSExtendedRequest req = new StartTLSExtendedRequest(sslUtil.createSSLContext());
mConn.processExtendedRequest(req);

// TLS连接成功,执行绑定
// authzId留空的EXTERNAL绑定请求
// 应使用TLS期间提供的证书
BindRequest request = new EXTERNALBindRequest("");
mConn.bind(request); // 此处失败

已尝试的排查方案

  • 尝试初始SSL连接并出示用户证书,但服务器反馈连接未绑定,不符合Microsoft Active Directory规范。
  • 尝试手动追踪握手过程:Android Studio无法调试套接字代码,设置javax.net.debug选项无输出。
  • 抓包排查需要设备Root权限,但服务器连接通过VPN建立,无法实施。

待排查思路

  • 确认KeyManager的证书加载有效性:检查密钥库类型(Android优先BKS)、证书别名是否正确、密钥库密码是否匹配,确保KeyManager实例确实包含了用于EXTERNAL绑定的完整证书链。
  • 监控客户端证书的选择过程:自定义X509KeyManager,重写chooseClientAlias方法并添加日志,确认TLS握手时是否选择了正确的客户端证书发送给服务器。
  • 验证AD服务器的EXTERNAL绑定规则:确认服务器是否要求客户端证书的SubjectDN与AD用户存在映射,或是否调整了TLS客户端证书信任策略。
  • 尝试指定authzId参数:将EXTERNALBindRequest的authzId参数改为证书对应的DN格式(如dn:cn=xxx,ou=xxx,dc=xxx),部分AD配置可能需要明确授权ID。
  • 排查SDK版本兼容性:尝试切换UnboundID LDAP SDK到稳定版本,确认是否存在SDK隐性Bug导致证书未被正确传递。
  • 验证VPN对TLS的影响:若允许,尝试在非VPN环境下测试绑定流程,确认VPN是否拦截或修改了TLS握手包中的证书信息。

内容的提问来源于stack exchange,提问作者sstb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:57:29