首页 > 解决方案 > Spring Boot 和 Kerberos - KrbException:不支持 default_tkt_enctypes 的默认 etypes

问题描述

我正在使用Spring Boot 1.5.6.RELEASE应用程序使用 Kerberos 身份验证将消息发送到Kafka 0.11 。这是我的kafka-jaas.conf

KafkaClient{
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  storeKey=true
  useTicketCache=true
  keyTab="/home/tomi/user-matXp.com.keytab"
  principal="user/matXp.com@COM";
};

并且application.yml

spring:
  kafka:
    bootstrap-servers: "kafka-server.com:9092"
    producer:
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
    properties:
      security.protocol: SASL_SSL
      sasl.mechanism: GSSAPI
      sasl.kerberos.service.name: kafka

我正在启动这样的应用程序:

-java -jar -Djava.security.auth.login.config=/home/tomi/kafka-jaas.conf
-Djava.security.krb5.conf=/home/tomi/krb5.conf 
kafka-0.0.1-SNAPSHOT.jar &> output.log&

尝试发送消息时,我得到sun.security.krb5.KrbException: no supported default etypes for default_tkt_enctypes.

在我krb5.conf default_tkt_enctypes的定义为aes256-cts-hmac-sha1-96. 我试图在 krb5.conf 中注释掉该行,但后来我得到了sun.security.krb5.Asn1Exception: Identifier doesn't match expected value (906).

任何想法如何解决这一问题?

标签: spring-bootapache-kafkakerberos

解决方案


问题是不包括 JCE 无限力量政策。默认情况下禁用。

解决方案是取消注释crypto.policy=unlimited$JAVA_HOME/jre/lib/security/java.security这也可以在应用程序中完成Security.setProperty("crypto.policy", "unlimited");


推荐阅读