openssl 获取x509.pem 证书信息

本文档介绍了如何利用openssl库中的PEM_read_bio_X509函数解析和提取x509.pem证书内容,特别是处理包含多个证书的数据文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 前言

  最近项目使用到了openssl库,特此记录下学习的内容。

       2.简单获取x509.pem证书的内容。

        

#include <stdio.h>
#include <openssl/x509.h>
#include <openssl/x509v3.h>
int main()
{
    BIO *b;
    char *Name = NULL, *header = NULL;
    unsigned char *data = NULL;

    b = BIO_new_file("platform.x509.pem", "r");
    while (1)
    {
        X509 *x;
        x = PEM_read_bio_X509(b, NULL, 0, NULL);
        if (x == NULL)
            break;

        X509_print_fp(stdout, x);
        X509_NAME   *subject   =   X509_get_subject_name(x);
        printf("%lu\n", X509_get_version(x));
        printf("%lu\n", X509_subject_name_hash(x));
        printf("%lu\n", X509_issuer_name_hash(x));
        X509_free(x);
    }
    BIO_free(b);
    return 0;

}
3.编译方法

gcc 1.c -lssl -lcrypto

4.函数说明

   PEM_read_bio_X509 该函数可用循环读取多次,特别时当一个证书文件中包含一个以上的证书数据时。


<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 ``` 因此,有两种方法: 方法一:生成keystore并在Android 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文件 ### 方法二:生成keystore并在Android 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 } } } ``` ### 注意事项 - 无论使用哪种方法,都需要确保APK的AndroidManifest.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` 等系统证书信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值