web-dev-qa-db-fra.com

Lors de l'utilisation de --negotiate avec curl, un fichier de clés est-il nécessaire?

La documentation décrivant comment se connecter à un point de terminaison sécurisé par Kerberos indique ce qui suit:

curl -i --negotiate -u : "http://<Host>:<PORT>/webhdfs/v1/<PATH>?op=..."

Le -u Le drapeau doit être fourni mais il est ignoré par curl.

Est-ce que le --negotiate Option permet à Curl de rechercher un keytab créé à l’avance avec la commande kinit, ou curl Demander des informations d’identité?

Si un fichier keytab est recherché, quel nom de fichier la commande recherchera-t-elle?

23
Chris Snow

Etre un contributeur ponctuel à curl dans ce domaine. Voici ce que vous devez savoir:

curl(1) lui-même ne sait rien de Kerberos et n'interagira ni avec votre cache d'informations d'identification ni avec votre fichier de clés. Il déléguera tous les appels à une implémentation GSS-API qui fera le travail magique pour vous. Quelle magie dépend de la bibliothèque, Heimdal et MIT Kerberos.

Sur la base de votre question, je suppose que vous avez peu de connaissances sur Kerberos et que vous souhaitez simplement automatiser les appels d'API vers un REST points de terminaison sécurisés par SPNEGO.

Voici ce que tu dois faire:

  1. Avoir un système d'exploitation de type Unix
  2. Installez au moins MIT Kerberos 1.11
  3. Installez au moins curl 7.38.0 contre MIT Kerberos
  4. Vérifiez ceci avec curl --version mentionnant GSS-API et SPNEGO et avec ldd lié à votre MIT version Kerberos.
  5. Créez une clé = client pour le principal du service avec ktutil ou mskutil
  6. Essayez d’obtenir un TGT avec cela client keytab by kinit -k -t <path-to-keytab> <principal-from-keytab>
  7. Vérifiez avec klist que vous avez un cache de tickets

L'environnement est maintenant prêt à partir:

  1. Exportation KRB5CCNAME=<some-non-default-path>
  2. Exportation KRB5_CLIENT_KTNAME=<path-to-keytab>
  3. Invoquer curl --negotiate -u : <URL>

MIT Kerberos détectera que les deux variables d’environnement sont définies, les inspectera, obtiendra automatiquement un TGT avec votre clavier, demandera un ticket de service et passera à curl. Vous avez terminé.

Note: cela ne fonctionnera pas avec Heimdal.

41
Michael-O
  1. Vérifier la version curl

    $ curl -V - Il devrait prendre en charge la fonctionnalité "GSS-Negotiate"

  2. Connectez-vous en utilisant kinit

    $ kinit <user-id>

  3. Utilisez curl

    $ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus

    L'option "--negotiate" active SPNEGO

    L'option "-u" est obligatoire mais est ignorée (le principe spécifié pendant kinit est utilisé)

    Les options "-b" et "-c" sont utilisées pour stocker et envoyer des cookies HTTP.

10
Avinash Reddy