如何提取JKS文件的证书和私钥?

文章来源

https://jingyan.baidu.com/article/066074d61de50cc3c21cb0ba.html

验证命令如下:
    > 生成证书文件:
	keytool -genkey -alias server_cert -keypass 12345678 -keyalg RSA -keysize 1024 -validity 365
	-keystore C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.keystore -storepass 87654321
	
	> 查看证书详情:
	keytool -list -v -keystore C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.keystore 
	-storepass 87654321
	
	> keystore文件生成cer文件:
	keytool -export -alias server_cert 
	-keystore C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.keystore
	-file C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\tomcat_server.cer
	
	> 打印证书信息:
	keytool -list -rfc -keystore C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.keystore 
	-storepass 87654321
	
	> 提取公钥(证书):
	将上一步(打印证书信息)中公钥信息复制到server.txt中保存后,将server.txt文件重新命名为:server.cer文件即可。
	
	> 提取私钥
	keytool -v -importkeystore 
	-srckeystore C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.keystore 
	-srcstoretype jks -srcstorepass 87654321 
	-destkeystore C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.pfx 
	-deststoretype pkcs12 -deststorepass 876543210 -destkeypass 12345678
		其中原密钥口令为:12345678
		
	openssl pkcs12 -in C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.pfx -nocerts -nodes 
	-out C:\Users\xxxx\Desktop\jarsigner\self-signed-certificate\server.key
		其中Enter Import Password:876543210

证书生成如下:

在这里插入图片描述


所谓JKS(Java Key Store)就是利用Java Keytool 工具生成的Keystore文件,JKS文件由公钥和密钥构成,其中的公钥就是我们所说的证书,即cer为后缀的文件,而私钥就是密钥,即以key为后缀的文件。本文主要介绍如何通过Keytool结合Openssl提取jks文件的公钥和私钥。

在这里插入图片描述


前提:
  • OpenSSL

一、准备工作

下图中的server.jks文件为小编用java keytools生成的密钥库文件。其中server.keystore和server.jks效果等同。

如果想了解如何用Keytool生成jks文件请参阅如下链接。

https://blog.csdn.net/u013412772/article/details/103726154 (keytool如何生成自签名证书?)

二、提取公钥(证书)

切换到证书的存储路径,执行如下命令:

keytool -list -rfc -keystore server.jks -storepass 87654321

则可以将证书信息打印到屏幕上。

在这里插入图片描述
将上图中的字符串复制保存到新建的server.txt文件中

在这里插入图片描述
将文件server.txt后缀名改为cer,双击打开cer文件即可以看见证书信息。

在这里插入图片描述

三、提取私钥

jks文件中的私钥不能直接得到,需要通过openssl将jks文件转换成pfx格式后再进行提取。

执行如下命令将server.jks文件转换成server.pfx文件:

keytool -v -importkeystore -srckeystore server.jks -srcstoretype jks 
-srcstorepass 87654321 -destkeystore server.pfx -deststoretype pkcs12 
-deststorepass 876543210 -destkeypass 12345678

在这里插入图片描述
执行如下命令便可以将servers.pfx的私钥导出:

openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key

在这里插入图片描述
执行vim server.key命令,便可以看到pfx文件的私钥信息
在这里插入图片描述
有些网站提供了将jks文件转换成pfx文件的功能,但是都需要输入文件的密码(keystorepass),存在安全隐患!不建议使用。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。
要在 Java 实现 JKS 和 JWKS 文件之间的转换,可以使用 Java KeyStore API 和 JSON Web Key (JWK) API。下面是实现这个过程的一些基本步骤: 1. 从 JKS 文件读取证书和密钥: ``` KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream("example.jks"), "password".toCharArray()); PrivateKey privateKey = (PrivateKey) keystore.getKey("alias", "password".toCharArray()); Certificate cert = keystore.getCertificate("alias"); ``` 2. 将证书私钥转换为 JWK 对象: ``` JWK jwk = JWK.parseFromPEMEncodedObjects(cert.getEncoded(), privateKey.getEncoded()); ``` 3. 将 JWK 对象转换为 JWKS 对象: ``` JWKSet jwkSet = new JWKSet(jwk); ``` 4. 将 JWKS 对象写入文件: ``` FileOutputStream fos = new FileOutputStream("example.jwks"); fos.write(jwkSet.toJSONObject().toString().getBytes()); fos.close(); ``` 要将 JWKS 文件转换为 JKS 文件,可以执行以下步骤: 1. 从 JWKS 文件读取 JWKSet 对象: ``` FileInputStream fis = new FileInputStream("example.jwks"); JWKSet jwkSet = JWKSet.load(fis); JWK jwk = jwkSet.getKeys().get(0); ``` 2. 将 JWK 对象转换为证书私钥: ``` X509Certificate cert = jwk.toX509Certificate(); PrivateKey privateKey = jwk.toPrivateKey(); ``` 3. 将证书私钥存储到 JKS 文件: ``` KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(null, null); keystore.setKeyEntry("alias", privateKey, "password".toCharArray(), new Certificate[] {cert}); FileOutputStream fos = new FileOutputStream("example.jks"); keystore.store(fos, "password".toCharArray()); fos.close(); ``` 请注意,这只是一个简单的示例代码,您需要根据自己的需求进行修改和调整。另外,在执行这些代码之前,请确保您已经理解了代码使用的所有 API 和组件,并且已经正确配置了您的环境和工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值