x509certificate java_java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(Seria...

该博客介绍了一个Java实用工具类,用于从PKCS12格式的密钥库中获取PrivateKey和受信任的X509Certificate的序列号。通过配置文件加载密钥库,然后遍历别名以找到X509证书,提取其序列号和私钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

importlombok.Cleanup;importlombok.Getter;importlombok.Setter;importlombok.SneakyThrows;importlombok.experimental.UtilityClass;importjava.io.FileInputStream;importjava.security.KeyStore;importjava.security.PrivateKey;importjava.security.cert.X509Certificate;importjava.util.Enumeration;/*** An utility class for obtaining {@linkPrivateKey} and the serial number of the trusted {@linkX509Certificate}

* from keystore in PKCS12 format*/@Getter

@Setter

@UtilityClasspublic classSignCertInfo {private static final SignCertInfo DEFAULT = newSignCertInfo();privateString certId;privatePrivateKey privateKey;public staticSignCertInfo createNew(Configs configs) {returncreateNewFrom(getKeyStore(configs), configs);

}

@SneakyThrowsprivate staticSignCertInfo createNewFrom(KeyStore store, Configs configs) {

Enumeration aliases =store.aliases();while(aliases.hasMoreElements()) {

String alia=aliases.nextElement();if(isX509Cert(store, alia)) {

newSignCertInfo(store, alia, configs);

}

}returnDEFAULT;

}

@SneakyThrowsprivate staticKeyStore getKeyStore(Configs configs) {

@Cleanup FileInputStream stream= newFileInputStream(configs.getPfxPath());

KeyStore store=KeyStore.getInstance(Pkcs12KeyStore.TYPE, Pkcs12KeyStore.PROVIDER);

store.load(stream, configs.getPfxPasswd().toCharArray());returnstore;

}

@SneakyThrowsprivate static booleanisX509Cert(KeyStore store, String alia) {returnCertificateType.X509.equalsIgnoreCase(store.getCertificate(alia).getType());

}

@SneakyThrowsprivate staticSignCertInfo newSignCertInfo(KeyStore store, String alia, Configs configs) {

SignCertInfo signCertInfo= newSignCertInfo();

signCertInfo.setCertId(((X509Certificate) store.getCertificate(alia)).getSerialNumber().toString());

signCertInfo.setPrivateKey((PrivateKey) store.getKey(alia, configs.getPfxPasswd().toCharArray()));returnsignCertInfo;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值