有没有办法从jenkins插件管理器导出先前上传的密钥库? 我上传了一个用于签名的.p12文件我想在我的新笔记本电脑上下载。不幸的是我在旅途中无法访问我的备份,所以我希望有一个简单的解决方案来从jenkins凭证管理器获取文件。
在credentials.xml中显示为KeyStoreUploadedBytes。 我知道有一种方法可以通过/ script部分解密密码存储。这也可以用于密钥库并以字节数组的形式接收它吗?
最佳帕特里克
答案 0 :(得分:1)
找到您的证书ID(例如在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.encoded
和privKey.encoded
将包含您需要的字节,但是,我想您对人类可读的证书/密钥表示更感兴趣。