2014-04-24 6 views
6

Mi chiedevo se c'era un modo per generare il mio keytab in java senza andare al kdc? Ho trovato il codice simile a questo in un test ApachDS:Posso generare il mio keytab a livello di codice in 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; 

sono in grado di un klist su un keytab che creo:

Vno Tipo Principal Data Alias ​​

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

Inoltre, se ciò non è possibile, esiste un modo per ottenere un keytab a livello di programmazione utilizzando ApacheDS o qualsiasi altra libreria java?

risposta

1

È necessario disporre di 3 elementi in un keytab per ogni archivio di enctype nel KDC per il principal.

  1. Il nome principale

  2. Il valore della chiave

  3. La versione tasto numerico

I primi due è possibile ricreare se si conosce la password per il committente, tuttavia l'ultimo richiede di contattare il KDC. È inoltre necessario utilizzare la password per creare tutti gli enctypes presenti nel KDC. Quello che vuoi fare è teoricamente possibile, ma in pratica è molto difficile da raggiungere. Se si utilizza knvo = 0 nella keytab, significa "prova questa chiave contro qualsiasi numero di versione" e questo potrebbe farti aggirare la maggior parte dei problemi.

Ciò che potrebbe essere ottenuto con solo il principal e la password è "bootstrap" il processo. Se è possibile ottenere un keytab con almeno una chiave funzionante, è opportuno che sia in grado di utilizzare tale keytab per "aggiornare" il keytab con nuove versioni di tutte le chiavi dal KDC utilizzando utilità di sistema come ktutil.

Come nota a margine: des-cbc-md5 non dovrebbe essere utilizzato come enctype se possibile, può essere sottoposto a brute force cracking con risorse hardware molto moderate in questi giorni.

Sfortunatamente, i protocolli kadmin per scaricare le keytab variano tra le versioni di Kerberos e non so se qualcuno di essi abbia le API java.

0

So che la domanda è specifica di Java, ma ecco un esempio in Python e poiché si tratta solo di chiamare lo strumento ktutil per creare keytab, dovrebbe essere facile da adottare ad altre lingue anche:.

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

Spero che questo aiuti

Problemi correlati