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