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

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";

}

原文地址:https://www.cnblogs.com/frankyou/p/11384314.html

时间: 2024-08-28 18:20:25

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

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

通过 SSL 加密的 HTTPS 连接访问网站时,需要安装并配置一个受信任的 CA 根证书(Trusted CA Root Certificate).平常访问一些加密网站之所以不需要自己安装证书,是因为系统或浏览器已经提前安装了一些受信任机构颁发的证书.但有些时候访问一些组织或个人自己签发证书的网站的时候,就会收到浏览器发出的警告.此时可以将该证书添加到“受信任的根证书颁发机构”存储区,然后就不会再收到安全提示了. 快捷阅读目录 前言 从Windows 自带的浏览器 Internet Explo

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

问题出现情景: 使用 vs2017 创建一个 ASP.NET Core Web 应用程序 -> Ctrl + F5 运行项目 选择是,但是添加证书失败,是什么原因导致的我不知道,有大佬的知道的话可以告知我 浏览器的效果显示 着手解决 根据现有vs的弹框提示,我理解为证书没有添加到信任区,需要手动添加证书到信任区 (1. 找出证书,2. 将它添加到受信任的存储区) vs 提示添加 弹框  相信 IIS Express SSL 证书 , 所以我们打开IIS,导出证书 最终得到证书 2. 导入证书 到

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

原文链接: http://blog.csdn.net/kkxgx/article/details/19850509 通常数字证书包含很多信息,其中N和E值即我们称为的公钥.如何从PEM 或者DER格式的证书中提出证书呢?下面给出代码实现从PEM和DER编码的证书中提出N.E. [cpp] view plaincopy #include <openssl/evp.h> #include <openssl/x509.h> #include <stdio.h> #includ

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

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

.pfx格式和.Cer格式的区别

注:本文为个人学习摘录,原文地址:http://blog.csdn.net/ghevinn/article/details/12648043 作为文件形式存在的证书一般有这几种格式: 1.带有私钥的证书 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名. 2.二进制编码的证书 证书中没有私钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名. 3.Base64编码的

iOS 中可用的受信任根证书列表

iOS 中可用的受信任根证书列表 iOS 受信任证书存储区中包含随 iOS 一并预装的受信任根证书. 关于信任和证书 以下所列的各个 iOS 受信任证书存储区均包含三类证书: "可信"的证书用于建立信任链,以验证由受信任根证书签署的其他证书:例如,与网页服务器建立安全连接.IT 管理员在创建 iOS 配置描述文件时,无需提供这些受信任的根证书. "始终询问"的证书不受信任,但不会被阻止.使用其中任一证书时,系统将提示您选择是不是信任这个证书. "已阻止&q

iOS 9 中可用的受信任根证书列表

iOS 受信任证书存储区包含随 iOS 预安装的可信根证书. https://support.apple.com/zh-cn/HT205205 关于信任和证书 iOS 9 受信任证书存储区包含三类证书: 可信的根证书用于建立信任链,以验证由可信的根签署的其他证书,例如,与 Web 服务器建立安全连接.当 IT 管理员创建 iPhone.iPad 或 iPod touch 的配置描述文件时,无需提供这些可信的根证书. 始终询问的证书不受信任,但不受阻止.使用其中一个证书时,系统将提示您选择是否信任

图解Win7如何手动添加受信任证书

点击开始->运行,如下图所示:   弹出"控制台"窗口如下,如下图所示:   点击"文件-添加/删除管理单元",如下图所示:   选择"证书",并点击"添加",如下图所示:   在弹出的窗口上选择"我的用户帐户"后点击"完成",如下图所示:   点击"确定",如下图所示:   选择要添加的证书,右键复制,如下图所示:   在左边窗口的"个人"

JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.math.BigInteger; import java.security.InvalidKeyException; import java.security.Key; import java.