Какое шифрование паролей Дженкинс использует?

Я изменяю 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 для более подробной информации

Ответ 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.