Какое шифрование паролей Дженкинс использует?
Я изменяю xml задания Дженкинса. Существует поле, которое является паролем. Когда я получаю xml, где теперь был сырой пароль, есть хэш.
Мне нужно знать, как создать этот хэш из значения необработанного пароля.
<scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
<username>user</username>
<password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
</scm>
Я читал Jenkins исходный код, и я думаю, что задействован класс HudsonPrivateSecurityRealm.java, но я не уверен в параметре salt.
PS: Это не для пароля Дженкинса для плагина, который в конфигурации задания имеет поле пароля.
Ответы
Ответ 1
Фактически, это не хэш, а скорее зашифрованный пароль. Я думаю, ключи шифрования хранятся в главном node. Фактически, вы можете расшифровать пароль, выполнив следующий groovy-скрипт на консоли сценария мастера
import hudson.util.Secret
def secret = Secret.fromString( "zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk =" )
Println (secret.getPlainText())
Код>
и если вы хотите зашифровать пароль, то
import hudson.util.Secret
def secret = Secret.fromString( "ваш пароль" )
Println (secret.getEncryptedValue())
Код>
Пароль, зашифрованный на компьютере, может быть дешифрован только на этом конкретном компьютере, так как клавиши генерируются случайным образом, и, очевидно, на разных машинах ключи отличаются.
Откроется ядро /src/main/java/hudson/util/Secret.java для более подробной информации
Ответ 2
Другой возможностью было бы выполнить Groovy script через консоль Jenkins Groovy (вы можете связаться с ней через JENKINS_URL/script):
println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk="))
В python возможны другие способы:
https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2
Ответ 3
Дженкинс использует AES-128-ECB для всех своих шифров. Он в основном использует файл master.key
для шифрования ключа, хранящегося в файле hudson.util.Secret
. Затем этот ключ используется для шифрования пароля в credentials.xml
.
Чтобы расшифровать пароль Jenkins, вам необходим доступ к файлам hudson.util.Secret
и master.key
. Вы можете точно проверить, как Дженкинс шифрует пароль, изучая класс hudson.utils.Secret
и его метод fromString
. В основном пароль объединяется с магией, прежде чем зашифровать с помощью KEY.
Для получения дополнительной информации, пожалуйста, проверьте: Хранилище учетных данных в Jenkins.
Чтобы дешифровать пароль, выполните следующие действия:
- Во время входа в систему в качестве администратора в Jenkins перейдите на страницу
/script
.
-
Выполните следующую команду:
println(hudson.util.Secret.decrypt("{XXX=}"))
или
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
где {XXX=}
- ваш зашифрованный пароль. Это напечатает простой пароль.
Чтобы сделать наоборот, запустите:
println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
Источник: gist at tuxfight3r/jenkins-decrypt.groovy
.
Альтернативно проверяйте следующие сценарии: tweksteen/jenkins-decrypt
,
menski/jenkins-decrypt.py
.