从jenkins凭证管理器导出密钥库

时间:2018-03-13 15:27:47

标签: jenkins keystore credentials

有没有办法从jenkins插件管理器导出先前上传的密钥库? 我上传了一个用于签名的.p12文件我想在我的新笔记本电脑上下载。不幸的是我在旅途中无法访问我的备份,所以我希望有一个简单的解决方案来从jenkins凭证管理器获取文件。

在credentials.xml中显示为KeyStoreUploadedBytes。 我知道有一种方法可以通过/ script部分解密密码存储。这也可以用于密钥库并以字节数组的形式接收它吗?

最佳

帕特里克

1 个答案:

答案 0 :(得分:1)

找到您的证书ID(例如在URL中):

Credentials ID in URL

在Jenkins实例的脚本控制台中执行脚本:

import com.cloudbees.plugins.credentials.*
import hudson.security.*
import java.security.*
import javax.xml.bind.DatatypeConverter

def creds =  CredentialsMatchers
                .firstOrNull(
                        CredentialsProvider
                            .lookupCredentials(
                                Credentials.class,
                                Jenkins.getActiveInstance(),
                                ACL.SYSTEM,
                                Collections.emptyList()
                            ),
                        CredentialsMatchers.withId("9X9X99XX-XX9X-9X99-9X9X-9X9X9999XXX9")
                )

// This will print a decrypted password
def password = creds.password
println password

// This will print all the available aliases
creds.keyStore.aliases().each { println it }

// Imagine, the alias you need is myapp.
// Get JVM representation of you certificate and key
def cert = creds.keyStore.getEntry("myapp", new KeyStore.PasswordProtection(password.toCharArray())).certificate
def privKey = creds.keyStore.getEntry("myapp", new KeyStore.PasswordProtection(password.toCharArray())).privateKey

// Format certificate and key
certpem = "-----BEGIN CERTIFICATE-----\n" +
        DatatypeConverter.printBase64Binary(cert.encoded) +
        "\n-----END CERTIFICATE-----\n";
keypem  = "-----BEGIN RSA PRIVATE KEY-----\n" +
        DatatypeConverter.printBase64Binary(privKey.encoded) +
        "\n-----END RSA PRIVATE KEY-----\n";

// Print them
println certpem
println keypem

BTW,cert.encodedprivKey.encoded将包含您需要的字节,但是,我想您对人类可读的证书/密钥表示更感兴趣。