2014-08-28 6 views
16

Jenkins 작업의 xml을 수정 중입니다. 암호 인 필드가 있습니다. xml을 얻을 때 원시 비밀번호가 있던 곳에서 해시가 있습니다.젠킨스가 사용하는 암호 암호화는 무엇입니까?

원시 암호 값에서이 해시를 만드는 방법을 알고 싶습니다.

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

나는 젠킨스 source code을 읽고하고 난 클래스 HudsonPrivateSecurityRealm.java이 참여하고있다 생각하지만 소금 매개 변수에 대한 확실하지 않다.

추신 : 이것은 Jenkins 암호가 아니며 작업 구성에 암호 필드가있는 플러그인을위한 것입니다.

+0

평문 암호를 알고 있다면 몇 가지 일반적인 해싱 알고리즘을 시도해 볼 수 있습니다. –

+0

HudsonPrivateSecurityRealm 클래스의 설명에 따르면 PasswordEncoder는 SHA-256 및 임의 소금 생성을 기반으로합니다. 따라서 문제는 젠킨스가 사용하는 소금을 얻는 방법이나 동일한 소금을 생성하는 방법입니다. –

+0

암호를 암호화 할 때 소금이 생성되고 [출력에 포함] (https://github.com/jenkinsci/jenkins/blob/0cc333faf285d587a87dee8a5ea54a4f75a2c758/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java#L602) -L603). 해시가 형식에 맞지 않기 때문에이 코드로는 해시가 생성되지 않을 수도 있습니다. 이는 플러그인에 의한 설정입니다. – Blaisorblade

답변

28

사실 해시가 아니라 암호화 된 암호입니다. 암호화 키가 마스터 노드에 저장되어있는 것 같습니다. 그것은 당신이 다음

import hudson.util.Secret 

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

을 비밀번호를 암호화하려면

import hudson.util.Secret 

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

가와 또한 암호가 하나의 암호화 된 것을 의미 마스터의 스크립트 콘솔에서 다음 그루비 스크립트를 실행하여 암호를 복원 할 수 있음을 의미 키는 무작위로 생성되고 분명히 다른 컴퓨터에서 키가 다르므로 특정 컴퓨터에서만 컴퓨터를 해독 할 수 있습니다. 자세한 내용

에 대한

체크 아웃 core/src/main/java/hudson/util/Secret.java

10

또 다른 가능성은 (당신이 JENKINS_URL 통해 도달 할 수/스크립트를) 젠킨스 그루비 콘솔을 통해 그루비 스크립트를 실행하는 것입니다 :

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

몇 가지 다른 방법을 파이썬으로 가능할 것입니다 :

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

+0

차가움. 나쁜 나는 거기에 올바른 권리가 없어 ... xxxxis 누락 된 전체/RunScripts 권한 – Cagy79

1

젠킨스는 모든 암호화에 AES-128-ECB을 사용합니다. 기본적으로 master.key 파일을 사용하여 hudson.util.Secret 파일에 저장된 키를 암호화합니다. 이 키는 credentials.xml에서 암호를 암호화하는 데 사용됩니다.

젠킨스 암호를 해독하려면 기본적으로 hudson.util.Secretmaster.key 개의 파일에 액세스해야합니다. 젠 프라이스가 비밀번호를 암호화하는 방법을 정확하게 확인하려면 hudson.utils.Secret 클래스와 fromString 메소드를 살펴보십시오. 기본적으로 암호는 KEY를 사용하여 암호화되기 전에 마술로 연결됩니다.

자세한 내용은 Credentials storage in Jenkins을 확인하십시오.


다음 단계를 수행 암호를 해독하려면 /script 페이지 :

  1. 동안은 젠킨스의 관리자로 로그인로 이동합니다.
  2. 다음 명령을 실행

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

    나 : {XXX=}는 암호화 된 비밀번호입니다

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

    . 일반 암호가 인쇄됩니다.

    실행, 반대를 수행합니다

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

출처 : gist at tuxfight3r/jenkins-decrypt.groovy합니다. tweksteen/jenkins-decrypt, menski/jenkins-decrypt.py :


은 또한 다음과 같은 스크립트를 확인합니다.