Передача местоположения keytab программно не работает (Kafka / Kerberos) - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь передать значение keytab в моем файле zookeeper-jass.conf. Я извлекаю его, используя следующий код:

String baseDirectory = System.getProperty("user.dir");
baseDirectory = baseDirectory.replace("\\", "/");
String keyTabPath = baseDirectory + "/test.keytab";

java.io.FileInputStream fs = null;
Properties prop=prop =new Properties();
fs = new java.io.FileInputStream(loginConfigPath);
prop.load(fs);

String keyTab = (String) prop.get("keyTab");
String newKeyTabPath = "\""+keyTabPath+"\"";
prop.setProperty("keyTab", newKeyTabPath);
prop.store(new java.io.FileOutputStream(loginConfigPath),null);


Вывод этого кода:

#Tue Jan 21 14:30:24 EST 2020
KafkaClient={
useTicketCache=false
serviceName="kafka"
useKeyTab=true
principal="example.com";
keyTab="C\:/Users/conf/test.keytab"
com.sun.security.auth.module.Krb5LoginModule=required
storeKey=true
};=

2 Проблемы:

  1. Двоеточие в keyTab экранируется.

  2. Поток вывода файла добавляет дополнительную информацию, такую ​​как (=: в конце файла && дата вверху файла) в конце, что заставляет его не работает.

Мне нужно, чтобы формат был

KafkaClient {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  useKeyTab=true
  keyTab="C:/Users/test.keytab"
  serviceName="kafka"
  storeKey=true
  principal="example.com";
};

1 Ответ

0 голосов
/ 22 января 2020

Вам не нужна строка, просто env-var

Например, запуск Kafka с файлом JAAS будет выполнен следующим образом

set KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"
bin\windows\kafka-server-start etc\kafka\server.properties
...