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.
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
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
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:
/script
page.Exécutez la commande suivante:
println(hudson.util.Secret.decrypt("{XXX=}"))
ou:
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
où {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
.