JKS to PEM

2023-10-27

本文转自:https://blog.tankywoo.com/2014/12/29/jks-to-pem.html 



JKS(Java KeyStore)是Java的一个证书仓库, 包括授权证书和公钥证书等.

$ file tankywoo.jks
tankywoo.jks: Java KeyStore

JDK 提供了一个工具 keytool 用于管理keystore.

安装JDK:

# Gentoo
$ sudo emerge -av virtual/jdk

# Ubuntu 两个都行
# sudo apt-get install openjdk-6-jdk    # 1.6
# sudo apt-get install openjdk-7-jdk    # 1.7 

(如果安装JRE, 则emerge -av virtual/jre)

现提供了一个JKS证书文件和证书的密码,需要转成PEM文件给Nginx SSL配置.

先通过keytool导出成PKCS12格式(.p12后缀):

$ keytool -importkeystore -srckeystore tankywoo.jks -destkeystore tankywoo.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

指定源(jks)文件和目标(pkcs)文件的文件名和类型.

执行时输入设置给pkcs12证书的密码, 以及jks证书的密码.

再通过openssl将pkcs12文件导出成pem格式文件.

# 生成key 加密的pem证书
$ openssl pkcs12 -in tankywoo.p12 -out tankywoo.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

# 生成key 非加密的pem证书
$ openssl pkcs12 -nodes -in tankywoo.p12 -out tankywoo.pem
Enter Import Password:
MAC verified OK

也可以分开导出:

导出key:

# 生成加密的key
$ openssl pkcs12 -in tankywoo.p12  -nocerts -out server.key
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

# 生成非加密的key
$ openssl pkcs12 -in tankywoo.p12 -nocerts -nodes -out server.key
Enter Import Password:
MAC verified OK

导出server证书:

$ openssl pkcs12 -in tankywoo.p12  -nokeys -clcerts -out server.crt
Enter Import Password:
MAC verified OK

导出ca证书:

$ openssl pkcs12 -in tankywoo.p12  -nokeys -cacerts -out ca.crt
Enter Import Password:
MAC verified OK

2015-03-11 补充:

今天有一个jks证书, 导出为p12时报错:

$ keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -srcstoretype jks -deststoretype pkcs12

Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias keystore successfully imported.
Problem importing entry for alias intermediate2: java.security.KeyStoreException: TrustedCertEntry not supported.
Entry for alias intermediate2 not imported.
Do you want to quit the import process? [no]:  n
Problem importing entry for alias intermediate1: java.security.KeyStoreException: TrustedCertEntry not supported.
Entry for alias intermediate1 not imported.
Do you want to quit the import process? [no]:  n
Import command completed:  1 entries successfully imported, 2 entries failed or cancelled

生成的p12只能导出server.crt和ca.crt, 无法导出server.key

查看jks证书内容:

$ keytool -list -v -keystore keystore.jks

看到有两个trustedCertEntry

Alias name: intermediate1
Creation date: Apr 30, 2014
Entry type: trustedCertEntry
...

Alias name: intermediate2
Creation date: Apr 30, 2014
Entry type: trustedCertEntry
...

这个讨论里提到了原因: ref 1

具体也可以看手册

java.security.KeyStoreException: TrustedCertEntry not supported
Problem: Attempt to store trusted certificates in PKCS12 keystore throws java.security.KeyStoreException: TrustedCertEntry not supported.

Cause 1: We do not support storing trusted certificates in pkcs12 keystore. PKCS12 is mainly used to deliver private keys with the associated cert chains. It does not have any notion of "trusted" certificates. Note that in terms of interoperability, other pkcs12 vendors have the same restriction. Browsers such as Mozilla and Internet Explorer do not accept a pkcs12 file with only trusted certs.

Solution 1: Use JKS (or JCEKS) keystore for storing trusted certificates.

但是把Google搜了一圈, 也没发现解决方法, 囧.

后来问老大, 刚好他几年前的一篇博客有方法 从 JKS keystore 中迁移证书到 Apache

具体可参考这篇博客Exporting the Private Key From a JKS Keystore, 这是一个java写的工具, 下载zip包直接使用ExportPrivateKey.zip

调用方式:

java -jar ExportPrivateKey.zip {keystore_path} JKS {keystore_password} {alias} {target_file}

alias可以通过上面的keytool -list看到.

用此命令生成了server.key, 和之前生成的server.crt, ca.crt合并就可以了


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JKS to PEM 的相关文章

  • Tensorflow:介绍常见激活函数和池化,并用Tensorflow搭建前向神经网络

    Tensorflow 介绍常见激活函数和池化 并用Tensorflow搭建前向神经网络 一 常见激活函数和池化 1 激活函数 激活函数通常用于卷积层和全连接层的末端 为神经网络提供非线性变化 1 1 sigmoid S形曲线 早期用于卷积层
  • AN OVERVIEW OF LANGUAGE MODELS RECENT DEVELOPMENTS AND OUTLOOK

    LLM系列相关文章 针对 AN OVERVIEW OF LANGUAGE MODELS RECENT DEVELOPMENTS AND OUTLOOK 的翻译 语言模型综述 近年来的发展与展望 摘要 1 引言 2 语言模型的类型 2 1 结
  • 手动删除shmget创建的共享内存

    使用shmget创建或打开共享内存的时候 其中有一个参数是制定了权限的 这个权限类似于文件的权限 指定了什么身份可以打开已经存在的共享内存 在我的项目中出现了一个程序运行失败 经过调查发现在使用shmget打开一段共享内存的时候没有权限 造
  • win10家庭版计算机属性里没有远程桌面,win10家庭版不支持远程桌面怎么办_远程桌面无法连接的解决方法...

    众所周知 有些win系统的家庭版本是无法远程桌面连接的 而且在连接的时候会报错 如果重新安装系统十分麻烦 那么咱们要怎么解决这个部分Windows电脑无法远程桌面连接的问题呢 下面小编就来分享多种Win电脑系统无法远程桌面连接的正确解决方法
  • js页面初始化方法只调用一次_10个常见的JS语言错误总汇

    1 Uncaught TypeError Cannot Read Property这是 JavaScript 开发人员最常遇到的错误 当你读取一个属性或调用一个未定义对象的方法时 Chrome 中就会报出这样的错误 导致这个错误发生的原因有
  • 地图采集车的那些事

    一 背景 高精地图 高精采集车 是做地图和出行领域同学经常挂在嘴上的一些常用词儿 但是 圈外的同学可能会问 到底什么是高精 高精是指高精度定位 高精地图是指包含丰富地理信息数据 具有高精度坐标的地图 当然 高精采集车就是采集制作高精地图数据
  • Caffe源码中io文件分析

    Caffe源码 caffe version commit 09868ac date 2015 08 15 中有一些重要的头文件 这里介绍下include caffe util io hpp文件的内容 1 include文件 1
  • MySQL 的FLASHBACK 数据回滚

    数据库的里面的FLASHBACK 功能是一个让人刮目相看的功能 如果你做错了什么怎么能将那段时间的数据恢复 并且还让生产的应用不停止 这是一个数据库管理员都想拥有的功能 SQL SERVER 需要借助第三方软件的功能 可以完成数据的回滚和恢
  • Python selenium各个组件的操作

    一 操作文本输入框 常用方法 说明 sendkeys 设值 clear 清空文本框内容 get attribute 获取文本框中的值 is display 判断元素是否显示 案例演示 from time import sleep from
  • Spring 如何解决循环依赖的问题

    一 什么是循环依赖 是两个或两个以上对象互相引用 即A依赖B B依赖C C又依赖A 例如 service public class A private B b Autowired public void setB B b this b b
  • 图像识别之KNN算法的理解与应用

    KNN是最经典的机器学习算法之一 该算法既可以用于数据分类 也可以用于数据回归预测 其核心思路是在训练样本中寻找距离最接近待分类样本的K个样本 然后 如果目的是分类 则统计这K个样本中的各个类别数量 数量最多的类别即认为是待分类样本的类别
  • STM32基础---BH1750 硬件 IIC 驱动程序+ 测试demo

    STM32基础 BH1750 硬件 IIC 驱动程序 测试demo STM32CudeMx MDK ARM BH1750 简介 产品介绍 产品特点 测量程序步骤 指令集合结构 从 写指示 到 读出测量结果 的测量时序实例 STM32Cube
  • Nvidia 2080 Ti很烫,是什么原因?

    我使用Dell工作站安装了Nvidia 2080 Ti显卡 重装了Ubuntu 16 04系统 系统刚装好后 发现显卡背面发热 很烫 见下图 我摸了另外一台相同配置的工作站 2080 Ti显卡并不烫 我原以为显卡坏了 多次开机 紧固显卡 仍

随机推荐

  • LoadRunner错误及解决方法总结[转]

    一 Step download timeout 120 seconds 这是一个经常会遇到的问题 解决得办法走以下步骤 1 修改run time setting中的请求超时时间 增加到600s 其中有三项的参数可以一次都修改了 HTTP r
  • MMDetection3.0环境配置(ubuntu20.04 + miniconda)

    MMDetection3 0环境配置 配置环境试用SOLO之后 总感觉和Mask R CNN比还差点意思 不论是精度还是速度 好像都没有作者说的那么强 不清楚是不是自建数据集的限制 或者因为没有调参影响了学习效果 有兴趣的可以看原文配置训练
  • python中的模块、库、包有什么区别

    1 python模块是 python模块 包含并且有组织的代码片段为模块 表现形式为 写的代码保存为文件 这个文件就是一个模块 sample py 其中文件名smaple为模块名字 关系图 2 python包是 包是一个有层次的文件目录结构
  • markdown 基础语法

    标题 在markdown中 使用 来表示标题 比如 代表一级标题 代表二级标题 以此类推 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 字体 使用符号来代表文字的各种状态 这是加粗的文字 这是倾斜的文字 这是斜体加粗的文字 这
  • 软件测试技术(白盒测试)

    一 实验原理 1 白盒测试 白盒测试也称为结构化测试或逻辑驱动测试 也就是已知产品的内部工作过程 清楚最终生成软件产品的计算机程序结构及其语句 按照程序内部的结构测试程序 测试程序内部的变量状态 逻辑结构 运行路径等 检验程序中的每条通路是
  • 电脑计算机里面只有c盘,电脑只有一个C盘怎么办?一招教你正确分区!

    前言 很多朋友在网上新买了笔记本电脑 或者是台式电脑 电脑只有一个磁盘 桌面上只有一个回收站 一脸懵逼 连 我的电脑 都找不到 今天小白就给大家电脑分区的教程 让大家可以正确分类自己的文件软件 PS 此教程合适广大的电脑小白 以及刚刚入门的
  • 计算机一级笔试2016年真题,2016年计算机一级真题及答案

    2016年计算机一级真题及答案 A ROM是只读存储器 其中的内容只能读一次 B 硬盘通常安装在主机箱内 所以硬盘属于内存 C CPU不能直接从外存储器读取数据 D 任何存储器都有记忆能力 且断电后信息不会丢失 参考答案 C 第22题 CP
  • win10 超级终端

    win10 超级终端 链接 https pan baidu com s 1tkc5EKwHkXC3xtm0BijWyA 提取码 u94q
  • 汇编语言笔记——微机结构基础、汇编指令基础

    文章目录 传送门 计算机系统基础 概述 微处理器 中央处理器 CPU 概述 性能指标与总线 前端总线 Front Side Bus 带宽 数据总线DB 地址总线AB 控制总线CB CPU软件特性与指令集 复杂指令集 CISC 精简指令集 R
  • Echarts图的tooltip提示框自定义展示各类数据

    需求 要求提示框显示统计值 统计值 分子 分母 外 还要展示分子和分母的数据 最开始以为Echarts图的series中data数据 只能是 series data 维度X 维度Y 其他维度 3 4 4 5 15 43 4 2 2 3 20
  • Mybatis Plus简述

    Mybatis Plus概述 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 提供了快速使用mybatis的方式 版本
  • Angular CLI 使用教程指南参考

    Angular CLI 使用教程指南参考 Angular CLI 现在虽然可以正常使用但仍然处于测试阶段 Angular CLI 依赖 Node 4 和 NPM 3 或更高版本 安装 要安装Angular CLI你需要先安装node和npm
  • RobotStudio 建立机器人模型和虚拟示教器的使用

    本系列使用的ABB机器人仿真软件版本为RbotStudio 5 15 02 64 bit 建立一个机器人模型 1 创建新工作站 空工作站 2 ABB模型库 选择机器人模型 3 导入模型库 选择工具模型
  • angular route 知識點

    讲解 路由功能是由 routeProvider服务 和 ng view 搭配实现 ng view相当于提供了页面模板的挂载点 当切换URL进行跳转时 不同的页面模板会放在ng view所在的位置 然后通过 routeProvider 配置路
  • 解决wordpress配置固定链接出现404错误

    两种方法解决 1 选择自定义结构在想要的固定链接格式前加 index php 这样虽然到达效果但是前面会加多个index php如果想不要的话试试第二种 2 我用的是nginx 在宝塔中选网站再进入设置选择伪静态 增加 location b
  • 向HTML中插入视频有两种方法

    向HTML中插入视频有两种方法 一种是古老的object标签 一种是html5中的video标签 前者兼容性相对好些 后者兼容性让人头疼 最常用的向HTML中插入视频的方法有两种 一种是古老的标签 一种是html5中的
  • CentOS 7.4 安装配置Samba服务器

    root localhost cat etc redhat release CentOS Linux release 7 4 1708 Core root localhost yum y install samba samba client
  • element 框架小细节

    Tabs 自定义添加页 div style margin bottom 20px div
  • NodeJS 对于 Java 开发者而言是什么?

    我们都知道Node js现在得到了所有的关注 每个人都对学习Node js感兴趣 并希望可以工作于Node js 在开始工作之前了解技术背后的概念总是不会错的 但对初学者来说 可能会因为不同的人使用的不同定义而晕头转向 Node js究竟是
  • JKS to PEM

    本文转自 https blog tankywoo com 2014 12 29 jks to pem html JKS Java KeyStore 是Java的一个证书仓库 包括授权证书和公钥证书等 file tankywoo jks ta