问题

我正在尝试使用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格式相关推荐

  1. java常见证书类型和密钥库类型

    一 .证书类型 1>证书概念: 证书是对现实生活中 某个人或者某件物品的价值体现 比如古董颁发见证书 ,人颁发献血证等 通常证书会包含以下内容 证书拥有者名称(CN),组织单位(OU)组织(O) ...

  2. Java操作word文档将docx转换为pdf格式

    Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...

  3. android studio生成JKS时候提示:JKS 密钥库使用专用格式。建议使用 keytool -importkeystore

    本文是方便新手的,将过程中许多问题都列举出来引用其他文章链接,方便新手快速找到如何解决,大家根据自己需求选择性查看即可 使用Android Studio自带的功能创建的key的时候,出现warning ...

  4. Android签名jks转pkcs12(JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore xx pkcs12“ 迁移到行业标准格式 PKCS12)

    有遇到如下error的朋友,可以阅读此文解决: 1.JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore E:\eeee -des ...

  5. 【错误记录】创建密钥报错 ( Key was created with errors: Warning: JKS 密钥库使用专用格式。建议使用 “ keyto “ 迁移到行业标准格式 PKCS12 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 创建签名密钥 : 选择 " 菜单栏 / Build / Generate Singed Bundle / APK - " 选项 ...

  6. Android APK签名 JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12“ 迁移到行业标准格式

    Android Studio中进行签名 转载地址:Android APK签名 JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore ...

  7. JKS 密钥库使用专用格式。建议使用 keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12 迁移到行业标准格式PKCS12

    错误: Key was created with errors: Warning: JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeyst ...

  8. Warning:JKS 密钥库使用专用格式。建议使用 keytool -importkeystore -srckeystore...pkcs12 迁移到行业标准格式 PKCS12

    背景 在给项目生成密钥文件的时候发现出现了一个错误. 使用 android studio 填写好相关信息后,最后生成密钥时会报一个 Error,如下图示: 报错信息如下: Key was create ...

  9. java usbkey数字证书_Java 密钥库和数字证书

    密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分. 1.cd C:\Program Files (x86)\Java\jdk1.6.0_10\bin 2.生成签名 ...

  10. JAVA实现bmp转换JPEG_Java gif图片转换为jpg格式

    下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...

最新文章

  1. MyBatis复习笔记2:配置文件详解
  2. 详解 | Dropout为何能防止过拟合?
  3. 在线英汉词典 智能纠错的设计
  4. Eclipse搭建android环境及Genymotion模拟器安装问题解决方法
  5. 编写与优化 Go 代码(一)
  6. ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
  7. python从入门到实践课后题第三章_《python从入门到实践》--第三章基本数据类型之列表 课后练习...
  8. Collections常用方法总结
  9. 作业MathExam
  10. 简单的优化mysql,提高查询性能
  11. 每日一句20191228
  12. @autowired注解 抽象类_Spring容器注解注入
  13. 客服回复话术100句
  14. 实现统一社会信用代码校验
  15. 广度/宽度优先搜索(BFS)详解
  16. Oracle ltrim() 函数详细用法
  17. 一个数的因子个数求解公式
  18. 蒙古军团最难对付的是谁?
  19. iPhone4 来电视频制作 超酷黑色主题,动态壁纸 附高清 性 感mv 上
  20. java输入年月输出日历_java 输入年月,获取日历表

热门文章

  1. Linux下误删除文件的各种恢复工具
  2. W3C官网查找资源教程
  3. 蓝桥杯练习题 <座次问题> 排列型枚举 next_permutation
  4. chrome主页篡改修复
  5. VC/MFC 编程经验
  6. 验证码自动识别平台与打码平台的区别
  7. VUE-waterfall瀑布流组件使用
  8. SQL Sever创库
  9. 瑞士证交所主席认为发行加密瑞士法郎有益经济发展
  10. 计算机音乐奇迹再现乐谱,天谕手游奇迹再现乐谱代码分享