SPNEGO:服务器收到的截断令牌比一个客户端发送的截短

时间:2018-07-03 18:06:41

标签: kerberos solrcloud spnego

我正在尝试与启用Kerberos的SolrCloud集群进行交互。我已经使用选项{p1}和jaas.conf配置了客户端Java进程

krb5.conf

我在客户端日志中收到一个禁止的错误。服务器日志显示以下错误:

  

身份验证异常:GSSException:检测到缺陷令牌   (机制级别:无效的SPNEGO NegTokenInit令牌:给出了额外的数据   到DerValue构造函数)

在客户端和服务器进程中启用调试日志记录时,我看到服务器收到的令牌比客户端发送的令牌小。 示例:

-Djava.security.auth.login.config=<path to jaas.conf>
-Djavax.security.auth.useSubjectCredsOnly=false 
-Djava.security.krb5.conf=<path to krb5.conf>

客户端正在发送更长的令牌。我通过客户端调试日志(发送令牌的时间更长)并通过查看HTTP请求标头验证了这一点。

通过查看源代码,我发现错误是由以下几行引起的: https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/util/DerValue.java#L383 https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/jgss/spnego/NegTokenInit.java#L143 https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java#L512

我尝试以编程方式连接的相同SOLR节点可通过浏览器访问,服务器日志显示它们接收到完整的令牌。 我正在使用Java 1.8.0_111,也尝试过Java 1.8.0_11

1 个答案:

答案 0 :(得分:0)

在进行TCP转储并查看了从客户端发送的请求之后,我发现底层的HTTP客户端库正在将base64编码的Kerberos令牌截断为每行76个字符,然后添加CRLF字符。 this答案中的更多信息。使用Apache HttpClient库使用的较新版本的commons-codec对其进行了修复。