创建自己的pk8, x509.pem并给app签名

本文详细介绍了如何使用keytool和openssl工具生成key,转换key格式,提取公钥和私钥,并将私钥转化为pk8格式,最后进行apk签名的过程。通过这些步骤,开发者可以创建自己的证书来签署Android应用程序。
1, 生成key
命令: keytool -genkey -v -keystore app.keystore -alias gundam_wing -keyalg RSA -validity 20000
控制台输出:
输入密钥库口令: 
再次输入新口令: 
您的名字与姓氏是什么?
[Unknown]: TechStone
您的组织单位名称是什么?
[Unknown]: Gundam
您的组织名称是什么?
[Unknown]: Gundam
您所在的城市或区域名称是什么?
[Unknown]: Shanghai
您所在的省/市/自治区名称是什么?
[Unknown]: Shanghai
该单位的双字母国家/地区代码是什么?
[Unknown]: zh
CN= TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh是否正确?
[否]: Y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 20,000 天):
CN= TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh
输入 <gundam_wing> 的密钥口令
(如果和密钥库口令相同, 按回车): 
[正在存储app.keystore]

<think>我们已知在Windows系统下使用platform.pk8和platform.x509.pem进行系统签名的步骤,主要涉及三个工具:openssl、keytool和java(用于执行signapk.jar)。根据引用[1]和引用[3]提供的方法,我们可以整合出以下步骤: 步骤1:将pk8文件转换为临时key文件(.tmp) 步骤2:将pem和临时key文件合生成PKCS12格式的临时文件(.p12) 步骤3:使用keytool将PKCS12文件导入到Java密钥库(.keystore)中 步骤4:在Android Studio的build.gradle中配置签名信息(或者使用signapk.jar直接签名) 但是,用户要求使用platform.pk8和platform.x509.pem直接对APK签名,而引用[3]提到了一种直接使用signapk.jar的方法,即: ``` java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk new.apk ``` 因此,有两种方法: 方法一:生成keystoreAndroid Studio中配置(适用于开发过程中自动签名) 方法二:使用signapk.jar直接对APK进行签名(适用于已经生成的APK文件) 由于用户明确提到“使用platform.pk8和platform.x509.pem对APK进行系统签名”,且没有提到Android Studio,我们重点介绍直接使用signapk.jar的方法。同时,为了完整性,也会提供生成keystore的方法。 ### 方法一:使用signapk.jar直接签名(推荐) 1. 下载signapk.jar工具(可以从Android源码中获取,或者从可靠来源下载,如引用[3]中使用了signapk.jar) 2. 准备platform.pk8和platform.x509.pem文件 3. 打开命令提示符(cmd),进入包含signapk.jar、platform.pk8、platform.x509.pem以及待签名APK的目录 4. 执行以下命令: ``` java -jar signapk.jar platform.x509.pem platform.pk8 your_app.apk signed_app.apk ``` 其中: - `your_app.apk`是待签名的APK文件 - `signed_app.apk`是签名后输出的APK文件 ### 方法二:生成keystoreAndroid Studio中配置 如果希望在开发过程中自动使用系统签名,可以生成一个keystore,然后在build.gradle中配置。步骤如引用[1]所述: 1. 使用openssl将pk8转换为临时key文件: ``` openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out key.tmp ``` 2. 生成PKCS12格式的临时文件(需要设置一个密码,比如123456): ``` openssl pkcs12 -export -in platform.x509.pem -inkey key.tmp -out p12.tmp -password pass:123456 -name platform ``` 注意:这里`-name`参数指定别名,可以任意,比如引用[1]中用的是"wipc",这里用"platform"。 3. 使用keytool将PKCS12文件转换为keystore: ``` keytool -importkeystore -deststorepass 123456 -destkeystore platform.keystore -srckeystore p12.tmp -srcstoretype PKCS12 -srcstorepass 123456 ``` 这里将生成的keystore保存为platform.keystore,密码设为123456(请替换为自己设置的密码)。 4.Android Studio项目的build.gradle中配置签名: ```groovy android { signingConfigs { system { keyAlias 'platform' keyPassword '123456' storeFile file('path/to/platform.keystore') storePassword '123456' } } buildTypes { release { signingConfig signingConfigs.system } } } ``` ### 注意事项 - 无论使用哪种方法,都需要确保APKAndroidManifest.xml中声明了系统权限:`android:sharedUserId="android.uid.system"`(引用[4]) - 如果使用signapk.jar,注意Java环境是否安装正确。 - 在方法二中,生成的keystore文件要妥善保管,确保build.gradle中配置的路径正确。 ### 相关问题 1. 如何获取signapk.jar? 2. 系统签名后的APK有什么特殊权限? 3. 除了系统签名,还有哪些方法可以让APK获得系统权限? 4. 在Windows 7上执行openssl命令时遇到问题怎么办?</think>在 Windows 7 上使用 `platform.pk8` 和 `platform.x509.pem` 对 APK 进行系统签名的步骤如下: ### 方法一:使用 signapk.jar(推荐) 1. **准备工具**: - 下载 [`signapk.jar`](https://github.com/tejado/android-signapk) - 确保已安装 Java 运行环境(JRE) 2. **签名命令**: ```powershell java -jar signapk.jar platform.x509.pem platform.pk8 原始.apk 签名.apk ``` - `原始.apk`:待签名的 APK 文件名 - `签名.apk`:输出文件名 - 示例:`java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk app-signed.apk`[^3] ### 方法二:生成 keystore 文件(适用于 Android Studio) 1. **转换文件格式**: ```powershell openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out key.tmp openssl pkcs12 -export -in platform.x509.pem -inkey key.tmp -out platform.p12 -password pass:自定义密码 -name "android" keytool -importkeystore -deststorepass 自定义密码 -destkeystore platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 自定义密码 ``` - 将 `自定义密码` 替换为你的密码 - 生成 `platform.keystore` 文件[^1] 2. **在 Android Studio 中配置**: ```gradle android { signingConfigs { system { keyAlias 'android' keyPassword '自定义密码' storeFile file('路径/platform.keystore') storePassword '自定义密码' } } buildTypes { release { signingConfig signingConfigs.system } } } ``` ### 关键配置 1. **AndroidManifest.xml**: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:sharedUserId="android.uid.system"> <!-- 添加系统UID --> ``` 2. **Android.mk**(NDK 项目): ```makefile LOCAL_CERTIFICATE := platform # 声明使用系统签名[^4] ``` ### 注意事项 - **文件路径**:确保所有文件路径正确,避免空格或中文路径 - **密码一致性**:所有密码需保持一致 - **权限问题**:需管理员权限运行命令行 - **Java 版本**:推荐 Java 8 或 11 ### 验证签名 ```powershell keytool -printcert -jarfile 签名.apk ``` 检查输出是否包含 `CN=Android` 等系统证书信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值