java 转pem_将Java密钥库转换为PEM格式
问题
我正在尝试使用keytool和openssl应用程序将Java密钥库文件转换为PEM文件。但我找不到转换的好方法。有任何想法吗?
我没有将密钥库直接转换为PEM,而是首先尝试创建PKCS12文件,然后转换为相关的PEM文件和密钥库。但我无法使用它们建立连接。 (请注意,我只需要一个PEM文件和一个密钥库文件来实现安全连接。没有像"从一个java密钥库文件开始"这样的限制。:)所以从我的情况开始可以从其他格式开始)
但是从jks到pem的直接转换方法是优选的。
#1 热门回答(190 赞)
这很简单,至少使用jdk6 ......
bash$ keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
Enter keystore password:
Re-enter new password:
Enter key password for
(RETURN if same as keystore password):
bash$ keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
Enter keystore password: asdasd
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1237334757 (0x49c03ae5)
Signature Algorithm: dsaWithSHA1
Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
Validity
Not Before: Mar 18 00:05:57 2009 GMT
Not After : Jun 16 00:05:57 2009 GMT
Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
Subject Public Key Info:
Public Key Algorithm: dsaEncryption
DSA Public Key:
pub:
00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
bash$ keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias foo successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
bash$ openssl pkcs12 -in foo.p12 -out foo.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
bash$ openssl x509 -text -in foo.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1237334757 (0x49c03ae5)
Signature Algorithm: dsaWithSHA1
Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
Validity
Not Before: Mar 18 00:05:57 2009 GMT
Not After : Jun 16 00:05:57 2009 GMT
Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
Subject Public Key Info:
Public Key Algorithm: dsaEncryption
DSA Public Key:
pub:
00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
bash$ openssl dsa -text -in foo.pem
read DSA key
Enter PEM pass phrase:
Private-Key: (1024 bit)
priv:
00:8f:b1:af:55:63:92:7c:d2:0f:e6:f3:a2:f5:ff:
1a:7a:fe:8c:39:dd
pub:
00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
你最终得到:
foo.jks - java格式的密钥库。
foo.p12 - PKCS#12格式的密钥库。
foo.pem - 来自密钥库的所有密钥和证书,采用PEM格式。
(如果你愿意,可以将此最后一个文件拆分为密钥和证书。)
命令摘要 - 创建JKS密钥库:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
命令摘要 - 将JKS密钥库转换为PKCS#12密钥库,然后转换为PEM文件:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
如果你的JKS密钥库中有多个证书,并且你只想导出与其中一个别名关联的证书和密钥,则可以使用以下变体:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
命令摘要 - 将JKS密钥库与PEM文件进行比较:
keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
openssl x509 -text -in foo.pem
openssl dsa -text -in foo.pem
#2 热门回答(25 赞)
使用StoBor的命令时,我一直收到来自openssl的错误:
MAC verified OK
Error outputting keys and certificates
139940235364168:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:535:
139940235364168:error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error:p12_decr.c:97:
139940235364168:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:123:
出于某种原因,只有这种命令方式才适用于我的JKS文件
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-srcalias mykey \
-deststoretype pkcs12 \
-destkeypass DUMMY123
关键是设置destkeypass,论证的价值无关紧要。
#3 热门回答(13 赞)
keytool命令不允许你从密钥库中导出私钥。你必须编写一些Java代码才能执行此操作。打开密钥库,获取所需的密钥,并将其保存为PKCS#8格式的文件。也保存关联的证书。
KeyStore ks = KeyStore.getInstance("jks");
/* Load the key store. */
...
char[] password = ...;
/* Save the private key. */
FileOutputStream kos = new FileOutputStream("tmpkey.der");
Key pvt = ks.getKey("your_alias", password);
kos.write(pvt.getEncoded());
kos.flush();
kos.close();
/* Save the certificate. */
FileOutputStream cos = new FileOutputStream("tmpcert.der");
Certificate pub = ks.getCertificate("your_alias");
cos.write(pub.getEncoded());
cos.flush();
cos.close();
使用OpenSSL实用程序将这些文件(二进制格式)转换为PEM格式。
openssl pkcs8 -inform der -nocrypt < tmpkey.der > tmpkey.pem
openssl x509 -inform der < tmpcert.der > tmpcert.pem
java 转pem_将Java密钥库转换为PEM格式相关推荐
- java常见证书类型和密钥库类型
一 .证书类型 1>证书概念: 证书是对现实生活中 某个人或者某件物品的价值体现 比如古董颁发见证书 ,人颁发献血证等 通常证书会包含以下内容 证书拥有者名称(CN),组织单位(OU)组织(O) ...
- Java操作word文档将docx转换为pdf格式
Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...
- android studio生成JKS时候提示:JKS 密钥库使用专用格式。建议使用 keytool -importkeystore
本文是方便新手的,将过程中许多问题都列举出来引用其他文章链接,方便新手快速找到如何解决,大家根据自己需求选择性查看即可 使用Android Studio自带的功能创建的key的时候,出现warning ...
- Android签名jks转pkcs12(JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore xx pkcs12“ 迁移到行业标准格式 PKCS12)
有遇到如下error的朋友,可以阅读此文解决: 1.JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore E:\eeee -des ...
- 【错误记录】创建密钥报错 ( Key was created with errors: Warning: JKS 密钥库使用专用格式。建议使用 “ keyto “ 迁移到行业标准格式 PKCS12 )
文章目录 一.报错信息 二.解决方案 一.报错信息 创建签名密钥 : 选择 " 菜单栏 / Build / Generate Singed Bundle / APK - " 选项 ...
- Android APK签名 JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12“ 迁移到行业标准格式
Android Studio中进行签名 转载地址:Android APK签名 JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore ...
- JKS 密钥库使用专用格式。建议使用 keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12 迁移到行业标准格式PKCS12
错误: Key was created with errors: Warning: JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeyst ...
- Warning:JKS 密钥库使用专用格式。建议使用 keytool -importkeystore -srckeystore...pkcs12 迁移到行业标准格式 PKCS12
背景 在给项目生成密钥文件的时候发现出现了一个错误. 使用 android studio 填写好相关信息后,最后生成密钥时会报一个 Error,如下图示: 报错信息如下: Key was create ...
- java usbkey数字证书_Java 密钥库和数字证书
密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分. 1.cd C:\Program Files (x86)\Java\jdk1.6.0_10\bin 2.生成签名 ...
- JAVA实现bmp转换JPEG_Java gif图片转换为jpg格式
下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...
最新文章
- MyBatis复习笔记2:配置文件详解
- 详解 | Dropout为何能防止过拟合?
- 在线英汉词典 智能纠错的设计
- Eclipse搭建android环境及Genymotion模拟器安装问题解决方法
- 编写与优化 Go 代码(一)
- ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
- python从入门到实践课后题第三章_《python从入门到实践》--第三章基本数据类型之列表 课后练习...
- Collections常用方法总结
- 作业MathExam
- 简单的优化mysql,提高查询性能
- 每日一句20191228
- @autowired注解 抽象类_Spring容器注解注入
- 客服回复话术100句
- 实现统一社会信用代码校验
- 广度/宽度优先搜索(BFS)详解
- Oracle ltrim() 函数详细用法
- 一个数的因子个数求解公式
- 蒙古军团最难对付的是谁?
- iPhone4 来电视频制作 超酷黑色主题,动态壁纸 附高清 性 感mv 上
- java输入年月输出日历_java 输入年月,获取日历表