convert a PKCS 12 cert to PEM format

2024年最全iOS开发 C语言使用笔记 PKCS12 openssl 改 p12密码,C C++面试基础知识 【代码】2024年最全iOS开发 C语言使用笔记 PKCS12 openssl 改 p12密码,C C++面试基础知识。 阅读详情

利用OpenSSL的PKCS12_parse函数进行证书格式转换的参考代码。 
目前这个函数还存在内存泄漏,这是OpenSSL 的Bug,做法上完全可以参考。
EVP_CIPHER *g_pEncAlg = NULL;
ESMTRESULT OsPEMCredConvert(FILE *fIn, char *pszP12Password, char *pszPassword, char /
*pszFilename,  BOOL fMakeCertChain)
{
  ESMTRESULT  hr = NF_S_OK;
  PKCS12     *p12 = NULL;
  EVP_PKEY   *pPkey = NULL;
  X509       *pCert = NULL;
  BIO        *pBIO = NULL;
  STACK_OF(X509) *pCaCerts=NULL;
  char        abFilename[MAXPATHLEN] = "";
  FILE       *fOut = NULL;
  int         fCerts = INFO;
  NfCtx       nfCtx;
  nfCtx.fIn  = fIn;
  nfCtx.fOut = stdout;

  CRYPTO_malloc_debug_init();
  MemCheck_start();

  do
  {
    if (fMakeCertChain && g_fOutputCaCerts)
    {
      hr = CRED_E_INCOMPATIBLE_FLAGS;
      break;
    }
    if (fMakeCertChain)
      fCerts |= CLCERTS;
    else if (g_fOutputCaCerts)
      fCerts |= CACERTS | NOKEYS;

    if ((pBIO = BIO_new(NfBIO())) == NULL)
    {
      hr = CRED_E_BIO;
      break;
    }
    BIO_ctrl(pBIO, BIO_CTRL_SET, BIO_NOCLOSE, (char *)&nfCtx);

    if ((p12 = d2i_PKCS12_bio(pBIO, &p12)) == NULL)
    {
      hr = CRED_E_P12_OPEN;
      break;
    }

    if (PKCS12_parse(p12, pszP12Password ? pszP12Password : "", &pPkey, &pCert, /
(STACK **)&pCaCerts) <= 0)  {
      hr = CRED_E_P12_PARSE;
      break;
    }


    if (pszP12Password == NULL)
    {
      if (!PKCS12_verify_mac(p12, NULL, 0))
      {
        hr = CRED_E_P12_BAD_PWD;
        break;
      }
    }
    else if (!PKCS12_verify_mac(p12, pszP12Password, -1))
    {
      hr = CRED_E_P12_BAD_PWD;
	    break;
    }

    /*  Encrypt private key with 3DES if required */
    g_pEncAlg = pszPassword != NULL ? EVP_des_ede3_cbc() : NULL;
    if (!dump_certs_keys_p12 (pBIO, p12, pszP12Password, -1, fCerts, pszPassword))
    {
      hr = CRED_E_P12_PARSE;
	break;
    }

  } while (0);

  if (fOut) fclose(fOut);
  if (pCaCerts) sk_X509_free(pCaCerts);
  if (pCert) X509_free(pCert);
  if (pPkey)EVP_PKEY_free(pPkey);
  if (p12) PKCS12_free(p12);
  if (pBIO) BIO_free(pBIO);

  ERR_free_strings();
  ERR_remove_state(0);
  EVP_cleanup();


  MemCheck_stop();
  CRYPTO_mem_leaks(stdout);

  return (hr);
}
SSH密钥格式转换全攻略:跨系统迁移与自动化实践 SSH(Secure Shell)协议是远程登录和文件传输的核心安全协议,其安全性依赖于非对称加密技术。公钥与私钥的配对使用,构成了身份认证的基础。在实际工程中,不同操作系统和工具(如OpenSSH、PuTTY、OpenSSL)生成的密钥格式各异,导致跨环境迁移时出现兼容性问题。掌握密钥格式转换技术,能确保自动化部署、CI/CD流水线和混合云环境中的身份凭证无缝迁移,提升运维效率和系统可移植性。本文聚焦于**OpenSSH Portable密钥格式转换**,详解从SSH2、PEM、PKCS#8等格式向标准O 阅读详情

相关推荐

BouncyCastle.NET:.NET开发者的密码学瑞士军刀与国密算法实战指南

在软件开发中,数据安全是核心需求,密码学技术为此提供了基础保障。其原理是通过数学算法对信息进行加密、解密和认证,确保数据的机密性、完整性与不可否认性。在.NET生态中,虽然官方System.Security.Cryptography库覆盖了通用场景,但在处理特定算法标准、复杂编码格式或跨平台兼容性时存在局限。BouncyCastle.NET作为一个功能丰富的开源密码学库,其技术价值在于提供了对国密算法(SM2/SM3/SM4)的合规性支持,以及对PEM、DER等复杂证书格式的强大处理能力,有效解决了官方库在

weixin_30357231的博客 538

iOS开发 C语言使用笔记 PKCS12 openssl 改 p12密码(1)

【代码】iOS开发 C语言使用笔记 PKCS12 openssl 改 p12密码(1)

2301_76379606的博客 340

目标检测技术的发展:从R-CNN、YOLO到DETR、DINO

OV-DINO的出现标志着在开放域目标检测领域的重大进步,其在处理未见过的物体类别时的能力得到了显著提升。这项技术对于需要适应未知或变化环境的应用具有重要意义,如自动驾驶、机器人视觉、安防监控等。

DeepAIedu的博客 2629

所有常见证书处理函数的实现

// 转换私钥编码格式          BOOL ConvertKeyFormat(char *oldKey,int oldKeyLen,int oldFormat,      char *newKeyFile,int newFormat)     {      EVP_PKEY *key=NULL;      BIO *biout=NULL;      int ret;    

zhulianhai0927的专栏 1509

yanshee 机器人全流程指南

2.点击yanshee app右上角根据提示操作 3.当手机显示成功连接 ,按下机器人胸前按钮说出“ip地址”4.根据机器人播报的ip地址加上:8888使用浏览器访问,你就会看到 jupyterd的界面,里面可以新建文件也可以改他存在的文件。我们使了yanshee机器人,这个是面向K12、中高职、高校学生推出的开源人形机器人教育平台,应用于课程教学、竞赛、科研活动等场景。我们接下来可以根据这些apl做许多好玩的,比如控制他运动,跳舞唱歌,it`s easy。注意电脑,手机,机器人必须连同一个网。

qq_44827929的博客 7610

从Live2D到Unreal Engine:2D与3D虚拟数字人核心技术实现路径解析

本文深入解析了从Live2D到Unreal Engine的2D与3D虚拟数字人核心技术实现路径,涵盖技术选型、制作流程与优化技巧。通过对比2D骨骼动画与3D建模渲染的差异,结合实战案例,帮助开发者根据项目需求选择合适方案,提升虚拟数字人的交互体验与视觉效果。

weixin_30379531的博客 149

p12解析流程_解析p12格式的程序(提取公钥和私钥)

公钥和私钥在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。 公钥私钥的原则: 一个公钥对应一个私钥。解析p12格式的程序p12是常有的封装格式。#include #include #include #include #...

weixin_39557813的博客 1708

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

transformer原理

qq_38253797的博客 2万+

parse p12 to x509

FILE *fp; PKCS12 *p12 = NULL; unsigned char buf[10000],*p; char pass[100]; EVP_PKEY *pkey = NULL; X509 *cert = NULL; int len,ret; STACK_OF(X509) *ca=NULL; BIO *bp; fp = fopen(".../client-cert.pem","rb...

danielzhou1025的博客 296

C语言中errno与perror()函数

宏errno和perror()函数都是在stdlib.h中定义的。 1 stdlib.h头文件 stdlib.h头文件即standard library标准库函数头文件,包含了C、C++语言的最常用的系统函数,该文件中还包含了C语言标准库函数的定义。 2 errno宏 errno宏在stdlib.h中的定义为 #define errno (*_errno()) errno宏用于保存程...

hou09tian的博客 1万+

AutoSAR系列讲解(入门篇)4.6-BSW的Watchdog功能

BSW的看门狗功能

雪云飞星的博客 1万+

Android 13 源码环境生成系统签名:3步命令从 platform.pk8 到 .jks

本文详细介绍了在Android 13源码环境中,如何通过三步命令行操作将platform.pk8和platform.x509.pem系统签名文件转换为Android Studio可用的.jks格式。文章提供了完整的转换流程、自动化脚本实现以及Android Studio集成指南,帮助开发者高效完成系统签名转换,确保应用获取系统级权限。

weixin_33768481的博客 366

Qt5+Ros+GUI界面

在之前建立的工程的基础上添加一个gui界面。 在ros包中新建一个文件夹,名字叫gui 右击gui文件夹添加一个文件,选择Qt->Qt设计师界面类 选择MainWindow 选择下一步 最后在gui中生成三个文件 mainwindow.cpp、mainwindow.h、mainwindow.ui 但此时,这些新创建的文件和原本的ros工程还没建立任何关系,只是目录下多出了几个文件而已...

二毛的博客 8843

Ubuntu 20.04纯OpenSSL搭建私有CA实战指南

私有证书颁发机构(CA)是构建零信任网络与内网TLS安全通信的基石。其核心原理在于基于X.509标准,通过RSA/ECC密钥对、数字签名和证书扩展(如basicConstraints、keyUsage)建立可验证的信任链。技术价值体现在完全掌控证书生命周期——从高安全性私钥生成(PBKDF2迭代、4096位RSA),到跨平台信任注入(Windows/macOS/Android系统级安装),再到CRL吊销机制保障动态权限管理。典型应用场景包括企业内网服务HTTPS化、IoT设备批量认证、Android抓包工具

weixin_33676492的博客 332

【图像超分】论文精读:Residual Dense Network for Image Super-Resolution(RDN)

一个非常深的卷积神经网络 (CNN) 最近在图像分类 (SR) 方面取得了巨大成功,并提供了分层特征。然而,大多数基于深度 CNN 的 SR 模型没有充分利用原始低分辨率 (LR) 图像中的层次特征,从而实现相对较低的性能。在本文中,我们提出了一种新的残差密集网络(RDN)来解决图像SR中的这个问题。我们充分利用所有卷积层的分层特征。具体来说,我们提出了残差密集块(RDB)通过密集连接的卷积层提取丰富的局部特征。RDB 进一步允许将前一个 RDB 的状态与当前 RDB 的所有层直接连接,从而产生连续的内存

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7256

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MuPDF mutool 命令行工具完全指南:PDF 处理瑞士军刀的命令速查与实战

mutool 是 MuPDF 自带的命令行工具集,官方将其定位为"PDF 操作的瑞士军刀"(swiss army knife of pdf manipulation tools)。它把文档渲染、格式转换、PDF 内部结构查看、文本搜索、资源提取、文件修复、页面合并、海报切分、数字签名、脚本执行等能力统一收纳在一个可执行文件之下。阅读本文后,你将掌握 mutool 的完整命令清单与各自的核心参数,能

gitblog_00628的博客 492

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Trimmy 文本清洗管线内部揭秘:箱线剥离到路径加引号的 6 个处理步骤

从复制粘贴到一键执行,**Trimmy** 是一款 macOS 菜单栏应用,核心功能是**多行命令清洗**:它监视剪贴板,把你从网页、README、聊天记录里复制的换行命令,自动压平为一条可直接粘贴运行的命令。今天带你走进它的核心引擎,看看这条**文本清洗管线**的 6 个步骤是如何协作的。 [![Trimmy 剪贴板命令清洗工具宣传卡片](https://raw.gitcode.com/gh_

gitblog_01180的博客 957

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

安卓ROM定制核心原理与实战:从boot.img重打包到全量签名

安卓ROM定制本质上是面向系统底层的工程实践,涉及Linux内核启动流程、Android分区结构(boot/system/vendor)、SELinux策略、dm-verity校验及多层签名机制等核心技术。其原理在于通过精确控制build.prop指纹、ramdisk初始化逻辑、设备树适配与platform密钥链,实现系统级可信运行。技术价值体现在规避变砖风险、通过GMS认证、满足金融类APP风控要求,并支撑教育硬件、车机、工业平板等垂直场景的深度定制需求。本文聚焦真实ROM作者每日高频操作——boot.i

weixin_34226182的博客 521

OpenSSL 中 RFC4514 专有名称(DN)字符串表示:语法规则、转义机制与解析实现详解

> 本文围绕 OpenSSL 设计文档 [doc/designs/rfc4514.md](https://link.gitcode.com/i/16905efe0a4a2aa320b16f323139156d) 展开,系统讲解 RFC 4514(取代 RFC 2253)所定义的 Distinguished Name(DN)与 Relative Distinguished Name(RDN)字符串表

gitblog_00281的博客 138

解析p12格式的程序(提取公钥和私钥)

p12是常有的封装格式。#include <stdlib.h><br />#include <stdio.h><br />#include <string.h><br />#include <openssl/pkcs12.h><br />#include <openssl/bio.h><br />#include <openssl/err.h><br />#include <openssl/pem.h> static const char *mon[12]=<br />{<br />    "Jan","F

mounter625的专栏 6977

使用openssl操作P12证书

使用openssl操作P12证书 以下代码并非完全原创,有所参考借鉴。 /* vi:set tw=0 ts=4 sw=4 noet: */ /************************************************************************/ /*! \file: p12op.cpp *...

weixin_33787529的博客 1183

PKCS12 证书的生成及验证

本文首先感谢 Apple 开发者论坛的eskimo1,他是我见过的最热心肠的人,对任何人他都不吝于给予无私帮助。 服务器生成PKCS12证书库,并通过servlet导出为DER客户端证书(含一个密钥和一个证书)。iPhone从服务器下载证书后,如何进行验证? 一、 生成证书 假设密钥库为dlt.p12,库密码ipcc@95598,有效期1天,则命令为: keytool -genkey -v

明明 1万+

30.openssl编程——PCKS12

30.1 概述pkcs12(个人数字标准)用于存放用户证书、crl、用户私钥以及证书链,pkcs12中的私钥是加密存放的。30.2 openssl实现openssl的pkcs12实现在crypto/pkcs12目录,有如下源码:目录架构用途p12_add.c处理PCKS12_SAFEBAG, PKCS12_SAFEBAG用于存放正数和私钥相关的信息p12_attr.c属性处理p12_ct...

艾小小雨的博客 714

Openssl证书的读取和分离

最近在做C++下的一些加密和解密的相关项目,整理了一下使用Openssl对于证书的一些操作,其中很多都是在网上搜索到的。准备在这个项目结束之后写一些关于Openssl使用上的心得。 获取的公私钥的代码: BOOL CTesteclibDlg::ParseDB(char *st

玉宇逍遥 5667

通过openssl解析pfx私钥证书,qtc++实现

通过openssl解析pfx私钥证书,qt5,openssl版本1.1.1u

qq_31013099的博客 820

OpenSSL的实用思考

最近由于在做苹果的一个Push服务器,需要用到SSL的库,决定选择网上比较热炒的Openssl,在此之前,也听说了这个库比较难处理,因为资料并不是很完整,所以开发会有困难,不过本着挑战一下,既然有人说好,那么就实际检验一下吧。在查了很多资料后,写了一个openssl的上层封装类,给大家拍砖。 首先到openssl去下载一个最新的openssl。地址是http://www.openssl.

孤独的糖三角 2029
上一篇: rfc2898:PKCS #5:基于密码的密码系统说明书版本 2.0.B
下一篇: URL match
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值