BouncyCastleProvider 对 X.509 证书的生成

文章目录

  • 前言
    • BouncyCastleProvider 对 X.509 证书的生成
      • 1. demo

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


BouncyCastleProvider 对 X.509 证书的生成

在这里说一下,为什么要用BouncyCastleProvider 来对证书的生成。
看下面截图:

keytool -list -v -keystore yzy.p12 -storetype PKCS12 -storepass yzy@yzy

win10 系统
在这里插入图片描述
linux系统
在这里插入图片描述
相同的p12证书在不同的环境,不一定都可以用,对于我这边的java服务来说,如果用BouncyCastleProvider 生成,基本上就不会有问题。

1. demo

package org.example.controller;import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo;
import org.bouncycastle.pkcs.PKCSException;
import org.bouncycastle.util.io.pem.PemObject;
import org.bouncycastle.util.io.pem.PemReader;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.spec.PKCS8EncodedKeySpec;public class Test {static {Security.addProvider(new BouncyCastleProvider());}public static void main(String[] args) throws Exception {String certFile = "F:/中间件/docker_p12/window/yzy.crt";String keyFile = "F:/中间件/docker_p12/window/yzy.key";String p12File = "F:/中间件/docker_p12/window/yzy.p12";String password = "yzy@yzy";// Load certificateCertificateFactory cf = CertificateFactory.getInstance("X.509");try (FileReader certInputStream = new FileReader(certFile);PemReader certPemReader = new PemReader(certInputStream)) {PemObject certPemObject = certPemReader.readPemObject();X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certPemObject.getContent()));// Load private keyPemReader keyPemReader = new PemReader(new FileReader(keyFile));Object pemObject = new PEMParser(keyPemReader).readObject();PrivateKey privateKey = null;if (pemObject instanceof PEMKeyPair) {PEMKeyPair pemKeyPair = (PEMKeyPair) pemObject;privateKey = new JcaPEMKeyConverter().getPrivateKey(pemKeyPair.getPrivateKeyInfo());} else if (pemObject instanceof PKCS8EncryptedPrivateKeyInfo) {PKCS8EncryptedPrivateKeyInfo encryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) pemObject;privateKey = new JcaPEMKeyConverter().getPrivateKey(encryptedPrivateKeyInfo.decryptPrivateKeyInfo(null));} else if (pemObject instanceof PrivateKeyInfo) {PrivateKeyInfo privateKeyInfo = (PrivateKeyInfo) pemObject;privateKey = new JcaPEMKeyConverter().getPrivateKey(privateKeyInfo);} else if (pemObject instanceof PemObject) {PemObject pem = (PemObject) pemObject;String type = pem.getType();System.out.println("PemObject type: " + type);if ("PRIVATE KEY".equals(type)) {PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pem.getContent());KeyFactory keyFactory = KeyFactory.getInstance("RSA");privateKey = keyFactory.generatePrivate(keySpec);} else {throw new IllegalArgumentException("Unknown private key format");}} else {System.out.println("PemObject class: " + pemObject.getClass().getName());throw new IllegalArgumentException("Unknown private key format");}// Create PKCS12 keystoreKeyStore pkcs12Store = KeyStore.getInstance("PKCS12", "BC");pkcs12Store.load(null, null);pkcs12Store.setKeyEntry("yzy", privateKey, password.toCharArray(), new Certificate[]{cert});// Save to .p12 filetry (FileOutputStream fos = new FileOutputStream(p12File)) {pkcs12Store.store(fos, password.toCharArray());}} catch (PKCSException e) {System.err.println("Error decrypting private key info: " + e.getMessage());} catch (IOException e) {System.err.println("IO error: " + e.getMessage());}}
}

测试:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员学CFA——经济学(六)

经济学(六) 国际贸易与资本流动国际贸易相关术语开放/封闭经济自由贸易/贸易保护贸易比价国内生产总值与国民生产总值 国际贸易的利弊分析益处弊端 从贸易中获益:比较优势比较优势和绝对优势比较优势的来源 贸易限制和贸易保护施行贸易保护政…

如何快速找车?一文教你如何打造一个高效的停车场反向寻车系统?

在当今快速发展的城市化进程中,大型商业综合体、购物中心和办公楼的停车场规模日益庞大,车辆数量急剧增加。随之而来的是车主在这些大型停车场中寻找自己车辆的困难。由于停车场空间大、结构复杂,缺乏有效的参照物,车主常常在寻车…

基于SpringBoot的网上书城管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,基于SpringBoot框架 工具:Eclipse,MySQL 系统展示 首…

英福康INFICON FabGuard传感器集成与分析系统PPT

英福康INFICON FabGuard传感器集成与分析系统PPT

VS安装Qt扩展工具

1-Visual Studio中安装QT插件 **插件下载地址:**http://download.qt.io/development_releases/vsaddin/ 关闭VS,双击下载的QT插件,默认安装即可; (1)配置Qt的MSVC编译器安装路径 打开Visual Studio,在菜单栏…

pbootCMS 数据库sqlite转mysql数据库

前言 pbootCMS默认使用 sqlite数据库 ,那么什么是sqlite数据库呢? SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌…

帕金森患者营养小贴士

👋亲爱的小伙伴们,今天我要给大家带来一份特别的关怀——关于帕金森患者的营养小贴士📘。帕金森病虽然是一种神经系统疾病,但合理的营养摄入对于患者的生活质量有着不可忽视的影响哦!💪 🍎多吃水…

万界星空科技日化行业MES解决方案

日化行业MES(制造执行系统)解决方案是针对日化行业特点而设计的一套全面的生产管理系统,旨在提高生产效率、优化资源配置、加强质量控制,并推动企业的数字化转型。以下是对日化行业MES解决方案的详细阐述: 一、MES解决…

TikTok短视频矩阵系统源码:创新驱动的内容生态引擎

在全球化的数字媒体时代,短视频已成为连接创作者与观众的桥梁。TikTok作为全球领先的短视频社交平台,其背后的短视频矩阵系统源码是支撑这一平台创新与成长的关键。本文将深入探讨TikTok短视频矩阵系统源码如何通过多账号管理、AI自动生成文案、批量剪辑…

【以史为镜、以史明志,知史爱党、知史爱国】中华上下五千年之-唐朝

唐朝(618年—907年),是继隋朝之后的大一统中原王朝,共历二十一帝,享国二百八十九年。 隋末天下群雄并起,617年 唐国公李渊于晋阳起兵,次年称帝建立唐朝,定都长安。 唐太宗继位后开创…

经典 SQL 数据库笔试题及答案整理

最近有蛮多小伙伴在跳槽找工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收录了下最近学员反馈上来的一些数据库笔试题&#xf…

【高中数学/幂函数】比较a=2^0.3,b=3^0.2,c=7^0.1的大小

【问题】 比较a2^0.3,b3^0.2,c7^0.1的大小 【解答】 a2^0.32^3/10(2^3)^1/108^1/10 b3^0.23^2/10(3^2)^1/109^1/10 c7^0.17^1/10 由于yx^1/10在x正半轴是增函数,底数大的得数就大。 因为9>8>7,所以b>a>c 【图像】 在图像上绘出曲线yx^1/10&…

完美解决ImportError: cannot import name ‘idnadata‘的正确解决方法,亲测有效!!!

完美解决ImportError: cannot import name idnadata’的正确解决方法,亲测有效!!! 亲测有效 完美解决ImportError: cannot import name idnadata的正确解决方法,亲测有效!!!报错问题…

如何更改WordPress网站的字体(适用于所有主题)

如何更改WordPress的字体的具体方法,需要取决于您使用的是新的区块主题还是比较旧的经典主题,这一点可能会让人感到困惑,本文中我们将详细介绍二者的区别以及如何分别在这两种主题中修改字体的的方法。 区别: 现代区块主题具有内…

前端web在线PPT编辑器-PPTLIST

哈喽,大家好,今天给大家介绍一款的在线的PPT编辑器开源框架-PPTLIST;他是一个基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,支持 文字、图片、…

C++ | Leetcode C++题解之第226题翻转二叉树

题目: 题解: class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) {return nullptr;}TreeNode* left invertTree(root->left);TreeNode* right invertTree(root->right);root->left right;root->right …

使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例

介绍 WordPress是一款免费开源的网站内容管理系统(CMS),它可以帮助用户简单快捷地创建和管理自己的网站,包括博客、新闻网站、电子商务网站、社交网络等等。WordPress 有丰富的主题和插件库,使得用户可以轻松地为网站…

SpringCloudAlibaba Nacos配置中心与服务发现

目录 1.配置 1.1配置的特点 只读 伴随应用的整个生命周期 多种加载方式 配置需要治理 1.2配置中心 2.Nacos简介 2.1特性 服务发现与服务健康检查 动态配置管理 动态DNS服务 服务和元数据管理 3.服务发现 1.配置 应用程序在启动和运行的时候往往需要读取一些配置信…

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

1、什么是以太网? 还记得初学以太网的时候,我就被一大堆专业名词给整懵了:什么以太网,互联网,MAC,IP,局域网,万维网,网络分层模型等等等等。慢着!我学的不是以太网吗?怎么出来这么一大堆东西? 啊!以太网究竟是什么?别急,我接下来就尽量用通俗的大白话来给你解释…

UML-各种图

什么是类图 定义系统中的类,描述类的内部结构(属性、方法等),表示类之间的关系(泛化、实现、依赖、关联、聚合、组合)。 UML表示类图 上图中左侧图形是一个常见的类图, 类名:在顶…