import lombok.Cleanup;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.experimental.UtilityClass; import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Enumeration; /**
* An utility class for obtaining {@link PrivateKey} and the serial number of the trusted {@link X509Certificate}
* from keystore in PKCS12 format
*/
@Getter
@Setter
@UtilityClass
public class SignCertInfo { private static final SignCertInfo DEFAULT = new SignCertInfo(); private String certId;
private PrivateKey privateKey; public static SignCertInfo createNew(Configs configs) {
return createNewFrom(getKeyStore(configs), configs);
} @SneakyThrows
private static SignCertInfo createNewFrom(KeyStore store, Configs configs) {
Enumeration<String> aliases = store.aliases();
while (aliases.hasMoreElements()) {
String alia = aliases.nextElement();
if (isX509Cert(store, alia)) {
newSignCertInfo(store, alia, configs);
}
}
return DEFAULT;
} @SneakyThrows
private static KeyStore getKeyStore(Configs configs) {
@Cleanup FileInputStream stream = new FileInputStream(configs.getPfxPath());
KeyStore store = KeyStore.getInstance(Pkcs12KeyStore.TYPE, Pkcs12KeyStore.PROVIDER);
store.load(stream, configs.getPfxPasswd().toCharArray());
return store;
} @SneakyThrows
private static boolean isX509Cert(KeyStore store, String alia) {
return CertificateType.X509.equalsIgnoreCase(store.getCertificate(alia).getType());
} @SneakyThrows
private static SignCertInfo newSignCertInfo(KeyStore store, String alia, Configs configs) {
SignCertInfo signCertInfo = new SignCertInfo();
signCertInfo.setCertId(((X509Certificate) store.getCertificate(alia)).getSerialNumber().toString());
signCertInfo.setPrivateKey((PrivateKey) store.getKey(alia, configs.getPfxPasswd().toCharArray()));
return signCertInfo;
} }
public interface Pkcs12KeyStore {

  String TYPE = "PKCS12";

  String PROVIDER = "SunJSSE";

}

java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)的更多相关文章

  1. 添加自签发的 SSL 证书为受信任的根证书

    原文:http://cnzhx.net/blog/self-signed-certificate-as-trusted-root-ca-in-windows/ 添加自签发的 SSL 证书为受信任的根证 ...

  2. 在Postman中使用不受信任的SSL证书

    阅读目录 第一种方案——临时添加到受信任的证书颁发机构: 第二种方案——永久添加到受信任的证书颁发机构: add by zhj: 在http://www.cnblogs.com/ajianbeyour ...

  3. 在Postman中使用不受信任的SSL证书(转)

    add by zhj: 在http://www.cnblogs.com/ajianbeyourself/p/3898911.html中提到: 对于不受信任的证书,浏览器会发出告警,不过这些也只是告警而 ...

  4. Vs2019 C# .net core 将证书添加到受信任的根证书存储失败,出现以下错误:访问控制列表(ACL)结构无效

    https://www.cnblogs.com/xiyuan/p/10632579.html 使用 vs2017 创建一个 ASP.NET Core Web 应用程序 -> Ctrl + F5 ...

  5. 将证书添加到受信任的根证书存储失败,出现以下错误:访问控制列表(ACL)结构无效

    问题出现情景: 使用 vs2017 创建一个 ASP.NET Core Web 应用程序 -> Ctrl + F5 运行项目 选择是,但是添加证书失败,是什么原因导致的我不知道,有大佬的知道的话 ...

  6. openssl 学习之从证书中提取RSA公钥N 和 E

    原文链接: http://blog.csdn.net/kkxgx/article/details/19850509 通常数字证书包含很多信息,其中N和E值即我们称为的公钥.如何从PEM 或者DER格式 ...

  7. java连接Oracle数据库,从ResultSet中提取数据出现java.sql.sqlException结果集已耗尽

    出现错误的原因是ResultSet中并没有任何东西,再调用next()方法就会出错,原因可能是oracle创建用户,表没有提交,commit即可

  8. Chrome:不受信任的证书----openssl签发带Subject Alternative Name的证书

    Chrome下自签名证书提示无效的问题 发现chrome验证证书很严格,必须带有Subject Alternative Name.签发csr时,修改openssl.cnf : vi /etc/ssl/ ...

  9. 从PFX文件中获取私钥、公钥证书、公钥

    https://blog.csdn.net/ZuoYanYouYan/article/details/77868584 该类具体功能:根据pfx证书得到私钥.根据私钥字节数组获取私钥对象.根据公钥字节 ...

随机推荐

  1. MySQL导入数据报错Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法

    由于max_allowed_packet的值设置过小的原因,只需要将max_allowed_packet值设置大一点就OK了.通过终端进入mysql控制台,输入如下命令可以查看max_allowed_ ...

  2. Python 栈、队列的实现

    在python中,列表既可以作为栈使用,又可以作为队列使用. 把列表作为栈使用 栈:后进先出 stack=[1,2,3] stack.append(4) #入栈,以列表尾部为栈顶 print(stac ...

  3. 15 Android系统安全(简要)

    Android的用户和第三方软件,Android组件和数据安全 手机root后的问题:1.系统不稳定,2.病毒入侵,3.数据泄露 Root原理: Root分两类:1.临时root,2.永久root R ...

  4. Java8新特性。

    常用函数接口: 函数式接口: 函数式接口在Java中是指:有且仅有一个抽象方法的接口(可以含其他方法). 而Java中的函数式编程的体现就是Lambda. @FunctionalInterface 注 ...

  5. TCP 协议简介-阮一峰(转载)

      TCP 协议简介 作者: 阮一峰 日期: 2017年6月 8日 TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议的作用 互联网由一整套协议构成.TCP 只是其中的一层,有着自 ...

  6. python爬取站长之家植物图片

    from lxml import etree from urllib import request import urllib.parse import time import os def hand ...

  7. django小知识(2)

    昨日内容回顾 1.choices参数 class Userinfo(models.Model): username = ... age = ... gender_choice = ( (1,'male ...

  8. Java动态代理-JDK自带实现

    上篇文章讲解了什么是静态代理,但是静态代理有一个问题就是需要建立很多的代理类,这样我们需要修改代理的方法的时候,需要在每个类中都要修改,这对于我们来说:当代理类很多的时候工作量就会成倍的增加. 于是针 ...

  9. koa-session 知识点

    github 网址:https://github.com/koajs/session session 是一个对象

  10. python 查询文件存放地址

    import os, time import sys import re def search(path,name): for root, dirs, files in os.walk(path): ...