1.等同于使用: openssl pkcs12 -export -inkey "key_path" -in "pem_path" -out "save_path" -passout pass:password

2.代码如下:keyFilePath为RSA private key文件。

bool MakeP12SSL(const char* keyFilePath, const char* pemFilePath, const char* pwd, const char* saveP12FilePath) {
int ret = ;
FILE *p12File = NULL;
EVP_PKEY *pKey = NULL;
X509 *cert = NULL;
PKCS12 *p12 = NULL;
BIO *keyFileBIO = NULL, *pemFileBIO = NULL;
RSA *r = NULL; keyFileBIO = BIO_new_file(keyFilePath, "r");
if (keyFileBIO == NULL) {
fprintf(stderr, "MakeP12SSL BIO_new_file err %s\n", keyFilePath);
goto free_all;
} r = PEM_read_bio_RSAPrivateKey(keyFileBIO, NULL, NULL, NULL);
if (r == NULL) {
fprintf(stderr, "MakeP12SSL PEM_read_bio_RSAPrivateKey err\n");
goto free_all;
} pKey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pKey, r);
r = NULL; // will be free rsa when EVP_PKEY_free(pKey) pemFileBIO = BIO_new_file(pemFilePath, "r");
if (pemFileBIO == NULL) {
fprintf(stderr, "MakeP12SSL BIO_new_file err %s\n", pemFilePath);
goto free_all;
} cert = PEM_read_bio_X509(pemFileBIO, NULL, NULL, NULL);
if (cert == NULL) {
fprintf(stderr, "MakeP12SSL PEM_read_bio_X509 err\n");
goto free_all;
} p12 = PKCS12_create(pwd, "", pKey, cert, NULL, , , , , );
if (p12 == NULL) {
fprintf(stderr, "MakeP12SSL PKCS12_create err\n");
goto free_all;
} p12File = fopen(saveP12FilePath, "w+");
if (p12File == NULL) {
fprintf(stderr, "MakeP12SSL fopen err %s\n", saveP12FilePath);
goto free_all;
} ret = i2d_PKCS12_fp(p12File, p12);
if (ret != ) {
fprintf(stderr, "MakeP12SSL i2d_PKCS12_fp err\n");
goto free_all;
} free_all:
BIO_free_all(keyFileBIO);
BIO_free_all(pemFileBIO);
EVP_PKEY_free(pKey);
PKCS12_free(p12);
if (p12File) fclose(p12File); return (ret == );
}

以上。

《C++ OpenSSL 之一:编译和使用》
《C++ OpenSSL 之二:生成RSA文件》
《C++ OpenSSL 之三:生成CSR文件》
《C++ OpenSSL 之四:CER转换为PEM》
《C++ OpenSSL 之五:生成P12文件

C++ OpenSSL 之五:生成P12文件的更多相关文章

  1. 如何生成.p12文件

    如何生成.p12文件 1. 打开钥匙串 2. 钥匙串选登录,种类选证书 3. 选择开发者,然后导出证书 4. 存储证书 5. 选择存储的时候会提示输入证书的密码,当然,也可以不用输入密码 6. 点击上 ...

  2. C++ OpenSSL 之二:生成RSA文件

    1.等同于生成private key: openssl genrsa -out "save_path" 2048 2.代码如下 bool MakeRsaKeySSL(const c ...

  3. C++ OpenSSL 之三:生成CSR文件

    1.等同于使用: openssl req -new -key "key_path" -out "save_path" -subj "/emailAdd ...

  4. Windows/Linux 生成iOS证书及p12文件

    操作步骤 生成csr文件(通过OpenSSL命令) 生成mobileprovision文件(通过Apple开发者后台) 生成cer文件(通过Apple开发者后台) 生成P12文件(通过OpenSSL命 ...

  5. 【上传AppStore】iOS项目上传到AppStore步骤流程(第二章) - 利用P12文件生成证书.多人开发必备 & 前言扫盲

    前言的前言 : 有几种关系需要搞清楚的.由我自己经历的坑和看着网上大多数资料来说,比较混乱.现在整理一下 正如前面的文章所言.一套由零 - 申请证书 - AppIDs - Provisioning P ...

  6. Https:证书生成 .p12 .keyStore 和 .truststore文件理解

    当我们需要SSL证书时,可以自动生成SSL证书,但是每个系统都申请一次证书会比较麻烦,所以用到了如下几个文件格式:   .p12(PKCS #12) 我们的每一个证书都可以生成一个.p12文件,这个文 ...

  7. 由crt和key文件生成keystore文件

    该图转自知乎 海棠依旧 1.先生成p12文件,生成的时候需要指定密码 openssl pkcs12 -export -in your_crt.crt -inkey your_key.key -out ...

  8. 一个苹果证书如何多次使用——导出p12文件

    一个苹果证书怎么多次使用--导出p12文件 为什么要导出.p12文件 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了 ...

  9. ios开发--一个苹果证书怎么多次使用——导出p12文件

    为什么要导出.p12文件 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了(一般在我们的证书界面中 ...

随机推荐

  1. Basics of Algorithmic Trading: Concepts and Examples

    https://www.investopedia.com/articles/active-trading/101014/basics-algorithmic-trading-concepts-and- ...

  2. 理解Javascript执行过程

    Javascript是一种解释型的动态语言. 在程序中,有编译型语言和解释型语言.那么什么是编译型语言,什么是解释型语言呢? 编译型语言: 它首先将源代码编译成机器语言,再由机器运行机器码(二进制). ...

  3. es6之后,真的不需要知道原型链了吗?

    3月份几乎每天都能看到面试的人从我身边经过,前段时间同事聊面试话题提到了原型链,顿时激起了我在开始学习前端时很多心酸的回忆.第一次接触js的面向对象思想是在读<js高程设计>(红宝书)的时 ...

  4. Linux学习笔记-第2天- 新的开始

    迟到且稀疏的笔记,希望自己今年会有所突破.加油

  5. DP问题(2) : hdu 1421

    题目转自hdu 1421,题目传送门 题目大意: 给你n个物品,你要搬走2*k个(也就是搬k次) 每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量) 要求所有 ...

  6. [LeetCode] 113. Path Sum II 二叉树路径之和之二

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  7. [LeetCode] 10. Regular Expression Matching 正则表达式匹配

    Given an input string (s) and a pattern (p), implement regular expression matching with support for  ...

  8. 《30天自制操作系统》笔记3 --- (Day2 上节)完全解析文件系统

    Day2 汇编语言学习与Makefile入门 本文仅带着思路,研究源码里关于文件系统的参数 关于day2主程序部分及更多内容,请看<30天自制操作系统>笔记 导航 发现学习中的变化 源码差 ...

  9. AntDeploy发布前端项目到IIS(脱离vs单独使用)

    AntDeploy AntDeploy是一款开源的一键发布部署工具,目的是代替重复性的发布动作,提高部署效率 1.一键部署iis 2.一键部署windows服务 3.一键部署到Docker 4.支持增 ...

  10. C# HTTP系列12 以form-data方式上传键值对集合到远程服务器

    系列目录     [已更新最新开发文章,点击查看详细] 使用multipart/form-data方式提交数据与普通的post方式有一定区别.multipart/form-data的请求头必须包含一个 ...