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

news2024/11/18 2:48:13

如下,我们有一个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.coloradmin.cn/o/1708223.html

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

相关文章

【论文阅读】xLSTM: Extended Long Short-Term Memory

xLSTM: Extended Long Short-Term Memory 引用: Beck M, Pppel K, Spanring M, et al. xLSTM: Extended Long Short-Term Memory[J]. arXiv preprint arXiv:2405.04517, 2024. 论文链接: [2405.04517] xLSTM: Extended Long Short-Term Memory (arxiv.…

Nocobase快速上手 -第一个collection

本文记录Nocobase中如何创建collection,以及如何将collection展示到页面中,并且配置CRUD相应的操作. Collection 在NocoBase中,collection(集合)是用来组织和存储各种数据的容器,如订单、产品、用户、评论…

VMware中的虚拟机设置开启VT虚拟化

虚拟机系统关机打开虚拟机设置-----点击处理器----勾选虚拟化引擎---确定即可

【UML】-01-UML基本元素的介绍

1、UML的词汇表 (1)事物; (2)关系; (3)图。 事物是对模型中首要成分的抽象;关系把事物结合在一起;图聚集了相关的事物。 注:事物也称为元素 2…

Springboot项目——网页版本五子棋

网页五子棋:本项目简单实现了网页版本的五子棋对战功能,同时会根据用户的天梯分数来匹配,可供多位用户同时提供对战功能。大致可分为三个模块,用户模块,匹配模块,对战模块,下面重点介绍以下三个…

交叉熵损失函数计算过程(tensorflow)

交叉熵损失函数通常用于多类分类损失函数计算。计算公式如下: P为真实值,Q为预测值。 使用tensorflow计算 import tensorflow as tf import keras# 创建一个示例数据集 # 假设有3个样本,每个样本有4个特征,共2个类别 # 目标标签…

简爱的思维导图怎么做?从这三个角度

简爱的思维导图怎么做?《简爱》作为夏洛蒂勃朗特的代表作,不仅是一部经典的爱情小说,也是探索女性独立与自我成长的文学巨著。为了深入理解这部作品,制作思维导图是一种高效的学习和分析工具。以下是三种不同的角度来创建《简爱》…

excel数据丢失怎么办?表格文件恢复的3个方法

Excel作为一个常用的表格文件,我们在工作中经常都需要用到它。最令人崩溃的事就是有时候我们辛辛苦苦用Excel完成了工作,但是突然发现Excel数据丢失。这可怎么办呢?如何找回丢失的Excel数据?下面小编就分享几种恢复办法。 方法一&…

抖音 v27.8.0 内置增强模块,自动播放、无水印下载(可登录,助手增强版)

介绍 抖音应用作为全球领先的短视频平台,其内置功能允许用户将喜欢的内容保存至本地设备,但默认情况下,这些视频会带有抖音的水印。为了解决这一限制,该版本使用户能够直接保存不带水印的视频到手机中,无需使用任何第…

TikTok电商带货特训营,跟随时代潮流,跨境掘金(8节课)

课程内容: 1-先导课 2-一、店铺运营认知与思路 3-二、店铺风控注意事项 4-三、美区Tiktok前期工作-1店铺入驻模式 5-三、美区Tiktok前期工作-2指纹浏览器介绍 6-三、美区Tiktok前期工作-4绑定电话号码 7-三、美区Tiktok前期工作-5添加仓库地址 8-三、美区Ti…

央视网视频下载和花屏问题处理

央视网(www.cctv.com)视频下载往往是花屏的,如何处理呢? 如果您是IT技术开发者,那么您可以通过下面步骤自己实现。 用chrome浏览器,F2打开开发者工具,找到当前页面的network 然后找一个接口:https://vdn.a…

JRebel 激活及使用

插件下载 JRebel and XRebel - IntelliJ IDEs Plugin | Marketplace 从磁盘安装下载的插件 windows下载激活服务 Releases ilanyu/ReverseProxy GitHub mac没有对应版本,需要Docker搭建本地激活服务 docker pull qierkang/golang-reverseproxy docker run -d -…

(2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch

Eagle and Finch: RWKV withMatrix-Valued States and Dynamic Recurrence 公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. Eagle/Finch 架构 4. 方法 4.1 Eagle 4.1.1 Eagle…

基于Pytorch框架的深度学习RegNet神经网络二十五种宝石识别分类系统源码

第一步:准备数据 25种宝石数据,总共800张: { "0": "Alexandrite","1": "Almandine","2": "Benitoite","3": "Beryl Golden","4": "Carne…

ctfshow web入门 黑盒测试

web380 这里文章看的我好有感触 但是影响做题 扫描一下 访问flag.php啥也没有再访问page.php page.php?idflagweb381 扫出来page.php但是没啥用哇,查看源代码 这些文件挨个试发现啥也没,最后仔细对比发现其实都是layui,然后尝试着访问…

神经网络的工程基础(零)——PyTorch基础

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下:regression2chatgpt/ch06_optimizer/gradient_descent.ipynb 本文将介绍PyTorch的基础。…

Centos安装,window、ubuntus双系统基础上安装Centos安装

文章目录 前言一、准备工作二、开始安装1、2、首先选择DATE&TIME2、选择最小安装3、 选择安装位置 总结 前言 因工作需要,我需要在工控机上额外装Centos7系统,不过我是装在机械硬盘上了不知道对性能是否有影响,若有影响,后面…

MyBatis系统学习篇 - MyBatis逆向工程

MyBatis的逆向工程是指根据数据库表结构自动生成对应的Java实体类、Mapper接口和XML映射文件的过程。逆向工程可以帮助开发人员快速生成与数据库表对应的代码,减少手动编写重复代码的工作量。 我们在MyBatis中通过逆向工具来帮我简化繁琐的搭建框架,减少…

macOS上用Qt creator编译并跑shotcut

1 简介 Shotcut是一个开源的跨平台的视频编辑软件,支持WIN/MACOS/LINUX等平台,由于该项目的编译较为麻烦,踩坑几许,因此写此文章记录完整编译构建过程,后续按此法编译,可减少走弯路,提高生产力。…

vue+antd实践:在输入框光标处插入内容

今天来看一个很简单的需求。 需求描述:在输入框光标处,插入指定的内容。 效果如下: 实现思路:刚开始还在想怎么获取光标的位置,但是发现所做的项目是基于vue3antd组件,那么不简单了嘛,只要调…