web-dev-qa-db-fra.com

Quel cryptage de mot de passe Jenkins utilise-t-il?

Je modifie un xml d'un travail Jenkins. Il y a un champ qui est un mot de passe. Lorsque j'obtiens le xml, où c'était le mot de passe brut, il y a maintenant un hachage.

Ce dont j'ai besoin, c'est de savoir comment créer ce hachage à partir de la valeur du mot de passe brut.

  <scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
    <username>user</username>
    <password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
  </scm>

J'ai lu Jenkins code source et je pense que la classe HudsonPrivateSecurityRealm.Java est impliquée mais je ne suis pas sûr du paramètre salt.

PS: Ce n'est pas pour le mot de passe Jenkins, c'est pour un plugin qui dans la configuration du travail a un champ de mot de passe.

23
Fran b

En fait, ce n'est pas un hachage mais plutôt un mot de passe crypté. Je suppose que les clés de chiffrement sont stockées dans le nœud maître. En fait, vous pouvez décrypter le mot de passe en exécutant le script groovy suivant sur la console de script du maître

import hudson.util.Secret

def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")
println(secret.getPlainText())

et si vous voulez crypter le mot de passe, alors

import hudson.util.Secret

def secret = Secret.fromString("your password")
println(secret.getEncryptedValue())

Un mot de passe chiffré sur un ordinateur ne peut être déchiffré que sur cet ordinateur particulier, car les clés sont générées de manière aléatoire et, évidemment, sur différentes machines, les clés sont différentes.

Consultez core/src/main/Java/hudson/util/Secret.Java pour plus de détails

37
tartakynov

Une autre possibilité serait d'exécuter un script Groovy via la console Jenkins Groovy (vous pouvez y accéder via JENKINS_URL/script ):

println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")) 

D'autres façons seraient possibles avec python:

https://github.com/tweksteen/jenkins-decrypt
https://Gist.github.com/menski/8f9980999ed43246b9b2

18
CSchulz

Jenkins utilise AES-128-ECB pour tous ses cryptages. Il utilise essentiellement le master.key fichier pour crypter la clé stockée dans hudson.util.Secret fichier. Cette clé est ensuite utilisée pour crypter le mot de passe dans credentials.xml.

Donc, pour décrypter le mot de passe Jenkins, vous devez essentiellement accéder à hudson.util.Secret et master.key des dossiers. Vous pouvez vérifier exactement comment Jenkins crypte le mot de passe en consultant hudson.utils.Secret classe et sa méthode fromString. Fondamentalement, le mot de passe est concaténé avec une magie avant d'être crypté à l'aide de KEY.

Pour plus de détails, veuillez vérifier: Stockage des informations d'identification dans Jenkins .


Pour décrypter le mot de passe, procédez comme suit:

  1. Une fois connecté en tant qu'administrateur dans Jenkins, accédez à: /script page.
  2. Exécutez la commande suivante:

    println(hudson.util.Secret.decrypt("{XXX=}"))
    

    ou:

    println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
    

    {XXX=} est votre mot de passe crypté. Cela imprimera le mot de passe simple.

    Pour faire l'inverse, exécutez:

    println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
    

Source: Gist à tuxfight3r/jenkins-decrypt.groovy .


Vous pouvez également vérifier les scripts suivants: tweksteen/jenkins-decrypt , menski/jenkins-decrypt.py .

9
kenorb