GSS-API errore contesto accettare: chiave di Servizio non disponibile - il codice Solaris, Windows KDC

StackOverflow https://stackoverflow.com/questions/6819790

  •  26-10-2019
  •  | 
  •  

Domanda

Sto tentando di ottenere un paio di test di Kerberos client / server di lavoro in Active Directory. Ho creato tre utenti di un dominio di ricambio nella nostra rete aziendale, "richardc", "Server1" e "Server2". I miei utenti del server sono stati mappati a diversi nomi principali di servizio, uno con KRB5_NT_PRINCIPAL, l'altra con KRB5_NT_SRV_HOST.

ktpass -out server2.keytab 
          -princ server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
          -mapuser ServerUser2@BENCHMARKING.RDDEV.LOCAL
          -pass ThePassword
          -crypto All
          -pType KRB5_NT_SRV_HOST
          -kvno 2

Non ho usato l'opzione + DesOnly questa volta, sperando che nei sistemi di oggi non ho bisogno di DES. Ho sostituito il nome di dominio reale con miodominio in questa domanda alla gestione evitare di preoccupazione.

Questo mi dà un keytab. Posso klist che:

KVNO Principal
---- --------------------------------------------------------------------------
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (DES cbc mode with CRC-32)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (DES cbc mode with RSA-MD5)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (ArcFour with HMAC/md5)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (AES-128 CTS mode with 96-bit SHA-1 HMAC)

I può anche utilizzare kinit -k di accedere utilizzando la chiave dal keytab -. Così sembra al lavoro

Ho sia il mio programma di test, e in mancanza di questo il programma di test da http://download.oracle.com/docs/cd/E19683-01/816-1331/sampleprogs-1/index.html . In quel programma, sul server, ho cambiato GSS_C_NT_HOSTBASED_SERVICE a GSS_C_NT_USER_NAME con entrambe le keytabs per renderlo riconosce il nome. Sono in esecuzione il server Oracle Demo come

./gss-server -mech 1.2.840.113554.1.2.2 server2/serbia.mydomain.com    

e il client

./gss-client -mech 1.2.840.113554.1.2.2 serbia.mydomain.com server2 "Hello"

Il risultato:

GSS-API error accepting context: Invalid credential was supplied
GSS-API error accepting context: Service key not available

In questo caso, sia con il mio codice di prova l'errore si verifica dopo che il cliente ha inviato il suo primo motivo, mentre il server sta tentando di decodificarlo.

spettacoli klist la chiave concesso per il cliente. Sta usando Arcfour, che si trova nel keytab

Default principal: RichardC@BENCHMARKING.RDDEV.LOCAL

Valid starting                Expires                Service principal
07/25/11 17:36:49  07/26/11 03:35:18  krbtgt/BENCHMARKING.RDDEV.LOCAL@BENCHMARKING.RDDEV.LOCAL
    renew until 08/01/11 17:36:49
07/25/11 17:36:03  07/26/11 03:35:18  server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
    renew until 08/01/11 17:36:03

La macchina UNIX (Serbia), concettualmente, potrebbe appartenere a un altro regno (quello che ho chiamato mydomain.com qui), anche se non sembra avere configurazione Kerberos. Sto usando un file krb5.conf locale che ho indicato al regno BENCHMARKING.RDDEV.LOCAL, ma se la macchina tenta di utilizzare il DNS con il suo nome host può ottenere la risposta sbagliata. Il mio krb5.conf ha

[libdefaults]
    default_keytab_name = /users/dev/core/richardc/server1.keytab
    default_realm = BENCHMARKING.RDDEV.LOCAL
    dns_lookup_kdc = false
    default_tkt_types = DES-CBC-MD5

[realms]
BENCHMARKING.RDDEV.LOCAL = {
    kdc = gbha-dcbench01p.benchmarking.rddev.local
    admin_server = gbha-dcbench01p.benchmarking.rddev.local
}

[domain_realm]
benchmarking.rddev.local = BENCHMARKING.RDDEV.LOCAL
.benchmarking.rddev.local = BENCHMARKING.RDDEV.LOCAL
mydomain.com = BENCHMARKING.RDDEV.LOCAL
.mydomain.com = BENCHMARKING.RDDEV.LOCAL

Si presenta come opzioni come default_tkt_types sono stati inefficaci.

La domanda è -? Come posso risolvere il mio errore

Grazie - Richard

È stato utile?

Soluzione

Il problema era nella

ktpass -out server2.keytab 
      -princ server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
      -mapuser ServerUser2@BENCHMARKING.RDDEV.LOCAL
      -pass ThePassword
      -crypto All
      -pType KRB5_NT_SRV_HOST
      -kvno 2

In questo modo Windows per aumentare il numero di versione chiave. La chiave risultante non è un problema per "kinit -k" login per qualche ragione, ma provoca codice server GSS-API di fallire con il tasto "Servizio non disponibile" inutile sui sistemi Solaris.

Il sistema di Windows è stato 2008R2. Capisco che il comportamento di questo comando è variato tra le diverse versioni di Windows.

Ho testato con successo con DesOnly. Avrei bisogno di tornare ai poveri reparto IT assediato per eventuali altri test :-)

La soluzione è quella di perdere l'argomento -kvno.

 ktpass -out server4.keytab 
      -princ server4/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
      -mapuser ServerUser4@BENCHMARKING.RDDEV.LOCAL
      -pass ThePassword
      -crypto DES-CBC-MD5
      -pType KRB5_NT_USER_PRINCIPAL

In questo modo l'uscita

Targeting domain controller: GBHA-DCBENCH01P.benchmarking.rddev.local
Using legacy password setting method
Successfully mapped server4/serbia.mydomain.com to Server4.
Key created.
Output keytab to server4.keytab:
Keytab version: 0x502
keysize 79 server4/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL ptype 1
     (KRB5_NT_PRINCIPAL) vno 5 etype 0x3 (DES-CBC-MD5) keylength 8 (0xd1532a6d0f2a8631)
Account Server4 has been set for DES-only encryption.

Si noti la "VNO 5" nell'output.

Ho provato con entrambi i valori per -ptype. Entrambi lavorano.

Il mio codice di GSS sta usando GSS_C_NT_HOSTBASED_SERVICE, ma tutto questo sembra alterare è il formato richiesto per inserire il nome.

(ho cambiato la chiave di cui sopra)

Addendum

La mia soluzione finale utilizza -ptype KRB5_NT_USER_PRINCIPAL

Il mio codice GSS utilizza GSS_C_NT_USER_NAME per cercare il nome, e io specificare il nome completo server4/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL . Ho scoperto che non tutte le piattaforme su cui stavo lavorando accettato la GSS_C_NT_HOSTBASED_SERVICE, ma tutti lo accetto GSS_C_NT_USER_NAME.

La persona che installa la nostra applicazione server imposta il nome del server principale come un'opzione di configurazione. Questo sembrava il modo più affidabile. La persona che imposta la chiave, quindi sa cosa sia, dice l'applicazione direttamente ciò che la chiave per l'uso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top