2014-04-24 28 views
6

Zastanawiam się, czy istnieje sposób, aby wygenerować własne keytab w java bez przechodzenia do KDC? Znalazłem kod podobny do tego w teście ApachDS:Czy mogę programowo generować własny keytab w języku Java?

Keytab keytab = Keytab.getInstance(); 
    KerberosTime timeStamp = new KerberosTime(KerberosUtils.UTC_DATE_FORMAT.parse("20070217235745Z")); 

    Map<EncryptionType, EncryptionKey> keys = KerberosKeyFactory 
     .getKerberosKeys(principalName, userPassword); 



    KeytabEntry keytabEntry = new KeytabEntry(
     principalName, 
     1L, 
     timeStamp, 
     (byte) 0, 
     keys.get(EncryptionType.DES_CBC_MD5)); 

    List<KeytabEntry> entry = Arrays.asList(keytabEntry); 

    keytab.setEntries(entry); 

    keytab.write(keytabFile); 

    return keytabFile; 

jestem w stanie do klist na keytab że tworzę:

Vno Rodzaj główny Data Aliasy

0 des-cbc- md5 ssh/[email protected] 2007-02-17

Ponadto, jeśli nie jest to możliwe, czy istnieje sposób programowego pobrania tablicy kluczy za pomocą ApacheDS lub dowolnej innej biblioteki Java?

Odpowiedz

1

Musisz mieć 3 rzeczy w pliku keytab dla każdego magazynu enctype w KDC dla głównego użytkownika.

  1. Głównym nazwa

  2. Wartość klucz

  3. Klucz numer wersji

Pierwsze dwa można odtworzyć, jeśli znasz hasło dla zleceniodawcy, jednak ostatni wymaga skontaktowania się z KDC. Musisz również użyć hasła, aby utworzyć wszystkie enkrypty znajdujące się w centrum dystrybucji kluczy. To, co chcesz robić, jest teoretycznie możliwe, ale w praktyce jest to bardzo trudne do osiągnięcia. Jeśli używasz knvo = 0 w keytab, oznacza to "spróbuj tego klucza przed dowolnym numerem wersji", co może pomóc ci rozwiązać większość problemów.

To, co może być osiągnięte z samym zleceniodawcą i hasłem, to "bootstrap" proces. Jeśli możesz zdobyć keytab z przynajmniej jednym kluczem roboczym, powinieneś/powinnaś móc użyć tego keytabu do "aktualizacji" keytabu nowymi wersjami wszystkich kluczy z KDC za pomocą narzędzi systemowych takich jak ktutil.

Na marginesie: des-cbc-md5 nie powinien być używany jako typ encefonu, jeśli to w ogóle możliwe, może być brutalnie wymuszony, z bardzo umiarkowanymi zasobami sprzętowymi.

Niestety, protokoły kadmin pobierania plików keytab różnią się w zależności od wersji Kerberos i nie wiem, czy którekolwiek z nich ma interfejsy API języka Java.

0

Wiem, że pytanie jest specyficzne dla języka Java, ale tutaj jest przykład w Pythonie i ponieważ jest to po prostu wywołanie narzędzia ktutil do utworzenia tablicy kluczy, powinno to być łatwe do przyjęcia na inne języki.

https://github.com/Tagar/stuff/blob/master/keytab.py

Hope this helps