[Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件

如下,我们有一个platform.pk8和platform.x509.pem。为了打包,需要将私钥(.pk8)和公钥证书(可能是.pem或.crt文件)合并成一个PKCS#12 格式的密钥库文件

1.准备你的私钥和证书文件

确保你有以下两个文件:

  • 私钥文件(例如:platform.pk8
  • 证书文件(例如:platform.x509.pem

2.使用OpenSSL合并成PKCS#12 格式

你可以使用OpenSSL命令行工具来创建一个PKCS#12格式的文件。打开命令行或终端,并运行以下命令:

$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pk8 -out platform.p12

这个命令做了什么:

  • -in platform.x509.pem: 这部分指定了证书文件。platform.x509.pem 需要替换为你的证书文件的实际路径。如果该文件位于当前目录下,可以直接使用文件名;如果不是,你需要提供完整的文件路径,例如 /path/to/your/platform.x509.pem

  • -inkey platform.pk8: 这部分指定了私钥文件。platform.pk8 需要替换为你的私钥文件的实际路径。同样,如果文件在当前目录下,直接使用文件名即可;如果在其他位置,需要提供完整的路径,例如 /path/to/your/platform.pk8

  • -out platform.p12: 这部分指定了输出文件的名称和位置。platform.p12 是输出文件的名字,你可以指定一个特定的路径来保存这个文件,例如 /path/to/your/platform.p12

你将被提示输入一个密码来保护这个新的密钥库文件,记得这个密码因为你在Android的签名配置中会需要它。

创建PKCS#12文件报错

$ openssl pkcs12 -export -in /Users/gamin/Documents/yunjuke/phone/call-sign/platform.x509.pem -inkey /Users/gamin/Documents/yunjuke/phone/call-sign/platform.pk8 -out /Users/gamin/Documents/yunjuke/phone/call-sign/platform.p12
unable to load private key
8363834048:error:09FFF06C:PEM routines:CRYPTO_internal:no start line:/AppleInternal/Library/BuildRoots/ce725a5f-c761-11ee-a4ec-b6ef2fd8d87b/Library/Caches/com.apple.xbs/Sources/libressl/libressl-3.3/crypto/pem/pem_lib.c:694:Expecting: ANY PRIVATE KEY

该错误信息 unable to load private key 以及 Expecting: ANY PRIVATE KEY 表明 OpenSSL 无法正确识别或解析提供的私钥文件(platform.pk8)。这通常发生在私钥格式与 OpenSSL 预期的格式不匹配时。

对于 Android 应用签名,通常使用的私钥格式为 PKCS#8 (.pk8),但是必须确保它是以 PEM 格式存储的。如果你的 .pk8 文件不是 PEM 格式的,你可能需要将其转换为 OpenSSL 可以识别的 PEM 格式。

转换私钥到 PEM 格式

(1).确定当前私钥格式

首先,你需要确认你的私钥是否已经是 PEM 格式。可以使用以下命令查看文件内容(仅查看前几行):

$ head /Users/gamin/Documents/call-sign/platform.pk8

$ cat /Users/gamin/Documents/call-sign/platform.pk8

如果看到 -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY----- 包围的文本,那么它是 PEM 格式的。如果没有,你需要执行转换。

如果输出以二进制形式显示,或者没有明显的 PEM 格式头(比如 -----BEGIN PRIVATE KEY-----),则表示可能是 DER 格式或其他格式。

下面这种是以二进制形式(DER 格式)存储的,而不是文本形式的 PEM 格式,看起来像乱码。因此,你需要将这个 DER 格式的私钥文件转换为 PEM 格式,以便 OpenSSL 能够正确处理。

(2).转换私钥到 PEM 格式

如果私钥是 DER 格式,你应该使用以下命令将其转换为 PEM 格式:

$ openssl pkcs8 -inform DER -outform PEM -in /Users/gamin/Documents/call-sign/platform.pk8 -out /Users/gamin/Documents/call-sign/platform.pem -nocrypt
  • -inform DER 表示输入文件是 DER 格式(二进制格式)。
  • -outform PEM 表示输出为 PEM 格式。
  • -in 指定输入文件的路径。
  • -out 指定输出文件的路径。
  • -nocrypt 表示输出的 PEM 文件不应加密。

转换后,确认是否转换完成:

$ cat /Users/gamin/Documents/call-sign/platform.pem

 你应该看到以 -----BEGIN PRIVATE KEY----- 开始并以 -----END PRIVATE KEY----- 结束的文本。

(3).重新尝试创建 PKCS#12 文件

使用新生成的 PEM 格式私钥再次尝试创建 PKCS#12 文件

不指定别名时,默认别名为1.

$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12

 也可以指定别名

$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -name "desired-alias"

你将被提示输入一个密码来保护这个新的密钥库文件 

示例:

$ openssl pkcs12 -export -in /Users/gamin/Documents/call-sign/platform.x509.pem -inkey /Users/gamin/Documents/call-sign/platform.pem -out /Users/gamin/Documents/call-sign/platform.p12

(4).PKCS#12 文件的别名和密码

在从 .pk8 和相关证书文件转换为 .p12(PKCS#12)格式的过程中,别名这个概念可能会有所变化,具体取决于你如何进行转换。.pk8 文件通常是一个私钥文件,它本身并没有包含别名信息,别名通常是与证书库(如 Java 的 keystore)一起使用时才有的概念。

当你将 .pk8 和对应的证书文件转换为 .p12 文件时,你可以指定一个别名,但这并不是自动的。如果在转换过程中没有显式指定别名,那么在生成的 .p12 文件中使用的别名可能是默认的,例如 1 或 mykey,这取决于你用来执行转换的工具和命令。

$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -name "desired-alias"

你将被提示输入一个密码来保护这个新的密钥库文件

 (5).检查 PKCS#12 证书别名
使用 OpenSSL 检查

你可以使用 OpenSSL 来列出 .p12 文件中的条目,这将帮助你找到正确的别名:

$ openssl pkcs12 -info -in /Users/gamin/Documents/yunjuke/phone/call-sign/platform.p12 -nodes

 这个命令会要求你输入密码(创建 .p12 文件时设置的密码),然后显示文件内容,包括证书和相关的密钥信息。别名通常会在输出中显示。

使用 keytool 检查别名

如果你安装了 Java Development Kit (JDK),你还可以使用 keytool 来查看文件中的别名:

$ keytool -list -keystore /Users/gamin/Documents/yunjuke/phone/call-sign/platform.p12 -storetype PKCS12

这也会要求你输入密钥库的密码,然后列出所有条目的别名和证书信息。

注意事项
  • 确保在命令行中指定正确的文件路径和密码。
  • 如果你从未指定过别名,工具可能会使用默认的别名,如 1 或 mykey,但这取决于创建 .p12 文件时所使用的具体工具或命令。

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

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

相关文章

设计模型-系统架构师(三)

1、按照《中华人民共和国著作权法》的权利保护期,署名权和修改权 是永久保护的。 发表权、使用权和获取报酬权 保护期限 作者终生和死后的50年。 2、(重要)面向对象的分析模型主要由 顶层架构图、用例与用例图和()构成…

2024年物理化学与工程技术发展国际会议(ICPCETD 2024)

全称:2024年物理化学与工程技术发展国际会议(ICPCETD 2024) 会议网址:http://www.icpcetd.com 会议时间: 2024.06.30 截稿时间:2024.06.21 会议地点: 上海 投稿邮箱:icpcetd_info163.com 投稿标题:ArticleT…

前端开发框架Angular

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Angular概述 Angular是由Google开发并维护的一款开源前端开发框架。它最初被设计为用于构建单页面应用(SPA),但随着版本的更新和发展&am…

刚接触抖店并开通了个体店,怎么快速起店呢?运营思路参考如下

我是王路飞。 如果你刚接触抖店,并且开通了个体店,但不知道如何做店的话。 其实很简单,抖店的流程并没有这么复杂。 电商的核心无非就是产品,抖店的运营也都是围绕产品展开的。 我给你们说下抖店的运营思路你们可以作为参考&a…

【Real】[Flask]SSTI

文章目录 前言一、题目解读二、解题过程三、知识点Flask是什么SSTI是什么SSTI是如何形成的易于利用的类payload是什么 探索类型和类层次结构和方法 前言 温馨提示:看到哪里不懂直接跳到知识点部分,理解完再回到解题过程。 一、题目解读 题目是[Flask]S…

如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

【Linux学习】进程间通信 (3) —— System V (1)

下面是有关进程通信中 System V 的相关介绍,希望对你有所帮助! 小海编程心语录-CSDN博客 目录 1. System V IPC 1. 消息队列 msg 消息队列的使用方法 1.1 消息队列的创建 1.2 向消息队列发送消息 1.3 从消息队列接收消息 1.4 使用msgctl函数显式地…

科技查新是什么?一文了解!

本文主要解答 1、什么是科技查新? 2、科技查新有哪些作用? 3、科技查新一般应用于什么地方? 4、在哪能出具正规查新报告? 5、科技查新流程是怎样的? 带着这些问题阅读这篇文章相信一定会有收获!干活内…

【启程Golang之旅】运算符与流程控制讲解

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

如何让UE4.26使用VS2022【Windows,源码下载】

使用UE5一直用的是VS2022,都是因为团队需要,只能用UE4,而我电脑中拥有的UE4的版本是UE4.26以及VS2022,我不可能去下载VS2019来为这么一个项目,所以就研究了一下是哪里阻止了UE4.26不让我使用VS2022. 首先下载UE4.26源码…

记一次安卓“Low on memory“崩溃问题

前言 最近再调人脸识别算法相关demo,发现调试期间总是偶发性崩溃,捕获不到异常的那种,看日志发现原因是Low on memory,一开始还疑惑 App内存不够应该是OOM啊,怎么会出现这种问题,百思不得其解,直到我打开了 Android s…

在MySQL数据库中进行连接查询中的外连接查询

左外连接 特征:以左表为主,显示左表所有数据,相关联存在相同的值时显示对应数据,否则显示为NULL 语法:> select 表名.字段名称,表名.字段名称 from 表名 left join 表名 on 相关联的字段…

Linux java jni调用C++封装动态库

由于项目中java需要调用第三方提供的C动态库;由于第三方动态库传入的参数较多,还伴随着指针传入操作,导致java调用极为不便!因此催生出对于第三方的C动态库进行二次封装。java调用只需按结构传入一个结构化的string即可。话不多说…

卧槽!这项目开源了!【送源码 】

随着科技的飞速发展,个人财务管理变得越来越重要。一个名为‘Maybe’的创新型个人财务与财富管理应用程序随之诞生,它以其丰富的功能和用户友好的界面受到了广大用户的关注。 现在项目方将这个价值 100万美元的个人理财应用项目开源了 Maybe Maybe应用…

吴恩达2022机器学习专项课程C2W2:2.19 sigmoid函数的替代方案 2.20如何选择激活函数 2.21 激活函数的重要性

这里写目录标题 引言sigmoid激活函数的局限1.回顾需求案例2.ReLU激活函数 常用的激活函数1.线性激活函数的解释 如何选择激活函数?1.选择输出层的激活函数2.选择隐藏层的激活函数 选择激活函数的总结1.输出层总结2.隐藏层总结3.TensorFlow设置激活函数 激活函数多样…

AI生成视频解决方案,降低成本,提高效率

传统的视频制作方式往往受限于高昂的成本、复杂的拍摄流程以及硬件设备的限制,为了解决这些问题,美摄科技凭借领先的AI技术,推出了全新的AI生成视频解决方案,为企业带来前所未有的视觉创新体验。 一、超越想象的AI视频生成 美摄…

大模型时代的具身智能系列专题(四)

google deepmind团队 谷歌旗下最大的两个 AI 研究机构——地处伦敦 DeepMind 与位于硅谷的 Google Brain 合并成立新部门 Google DeepMind。其将机器学习和系统神经科学的最先进技术结合起来,建立强大的通用学习算法。代表作有AlphaGo,AlphaStar&#x…

鸿蒙ArkTS声明式开发:跨平台支持列表【组件快捷键事件】

组件快捷键事件 开发者可以设置组件的自定义组合键,组合键的行为与click行为一致,组件在未获得焦点状态下也可以响应自定义组合键,每个组件可以设置多个组合键。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-s…

香橙派 AiPro通过Micro USB接口进行串口调试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、配置步骤1.安装CH343驱动2.配置串口参数 二、使用步骤总结 前言 最近在玩一个新玩具香橙派 AiPro,除了通过SSH方式连接开发板以外,…

华为机考入门python3--(32)牛客32-密码截取

分类:最长对称子串、动态规划 知识点: 生成二维数组 dp [[0] * n for _ in range(n)] 求最大值 max(value1, value2) 动态规划的步骤 a. 定义问题 长度为n下最长的对称子串的长度 b. 确定状态 dp[i][j]表示字符串从索引i到j的子串是否为对称…