Spring 引导和 Kerberos - KrbException:default_tkt_enctypes 不支持默认 etype
Spring Boot & Kerberos - KrbException: no supported default etypes for default_tkt_enctypes
我正在使用 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)
.
有什么解决办法吗?
问题在于未包含 JCE 无限强度策略。默认情况下它是禁用的。
解决方案是在 $JAVA_HOME/jre/lib/security/java.security
中取消注释 crypto.policy=unlimited
。
这也可以在应用程序中使用 Security.setProperty("crypto.policy", "unlimited");
.
完成
我正在使用 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)
.
有什么解决办法吗?
问题在于未包含 JCE 无限强度策略。默认情况下它是禁用的。
解决方案是在 $JAVA_HOME/jre/lib/security/java.security
中取消注释 crypto.policy=unlimited
。
这也可以在应用程序中使用 Security.setProperty("crypto.policy", "unlimited");
.