openssl3.2 - 官方demo学习 - pkcs12 - pkread.c

文章目录

    • openssl3.2 - 官方demo学习 - pkcs12 - pkread.c
    • 概述
    • 笔记
    • END

openssl3.2 - 官方demo学习 - pkcs12 - pkread.c

概述

openssl3.2 - 官方demo学习 - 索引贴
将官方demos的pkread.c 过了一下.
只要有正确的.P12证书和导出口令, 这个实验做起来很快.

程序功能, 读.P12文件(需要给出导出口令), 将证书的友好名称, 私钥, 可信任证书都导出到指定的输出文件.

笔记

/*!
\file pkread.c
\note 
openssl3.2 - 官方demo学习 - pkcs12 - pkread.c*//** Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.** Licensed under the Apache License 2.0 (the "License").  You may not use* this file except in compliance with the License.  You can obtain a copy* in the file LICENSE in the source distribution or at* https://www.openssl.org/source/license.html*/#include <stdio.h>
#include <stdlib.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/pkcs12.h>#include "my_openSSL_lib.h"/* Simple PKCS#12 file reader */static char* find_friendly_name(PKCS12* p12)
{STACK_OF(PKCS7)* safes;int n, m;char* name = NULL;PKCS7* safe;STACK_OF(PKCS12_SAFEBAG)* bags;PKCS12_SAFEBAG* bag;if ((safes = PKCS12_unpack_authsafes(p12)) == NULL)return NULL;for (n = 0; n < sk_PKCS7_num(safes) && name == NULL; n++) {safe = sk_PKCS7_value(safes, n);if (OBJ_obj2nid(safe->type) != NID_pkcs7_data|| (bags = PKCS12_unpack_p7data(safe)) == NULL)continue;for (m = 0; m < sk_PKCS12_SAFEBAG_num(bags) && name == NULL; m++) {bag = sk_PKCS12_SAFEBAG_value(bags, m);name = PKCS12_get_friendlyname(bag);}sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);}sk_PKCS7_pop_free(safes, PKCS7_free);return name;
}/*!
* 程序功能, 读.P12文件(需要给出导出口令), 将证书的友好名称, 私钥, 可信任证书都导出到指定的输出文件.  
*/
int main(int argc, char** argv)
{FILE* fp;EVP_PKEY* pkey = NULL;X509* cert = NULL;STACK_OF(X509)* ca = NULL;PKCS12* p12 = NULL;char* name = NULL;int i, ret = EXIT_FAILURE;const char* psz_p12file = NULL;const char* psz_pwd = NULL;const char* psz_opfile = NULL;if (argc != 4) {// pkread p12file password opfile//        my_server.p12 pwd_my_server out.pem      fprintf(stderr, "Usage: pkread p12file password opfile\n");exit(EXIT_FAILURE);}psz_p12file = argv[1];psz_pwd = argv[2];psz_opfile = argv[3];if ((fp = fopen(psz_p12file, "rb")) == NULL) {fprintf(stderr, "Error opening file %s\n", psz_p12file);exit(EXIT_FAILURE);}p12 = d2i_PKCS12_fp(fp, NULL);fclose(fp);if (p12 == NULL) {fprintf(stderr, "Error reading PKCS#12 file\n");ERR_print_errors_fp(stderr);goto err;}if (!PKCS12_parse(p12, psz_pwd, &pkey, &cert, &ca)) {fprintf(stderr, "Error parsing PKCS#12 file\n");ERR_print_errors_fp(stderr);goto err;}name = find_friendly_name(p12);PKCS12_free(p12);if ((fp = fopen(psz_opfile, "w")) == NULL) {fprintf(stderr, "Error opening file %s\n", psz_opfile);goto err;}if (name != NULL)fprintf(fp, "***Friendly Name***\n%s\n", name);if (pkey != NULL) {fprintf(fp, "***Private Key***\n");PEM_write_PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL);}if (cert != NULL) {fprintf(fp, "***User Certificate***\n");PEM_write_X509_AUX(fp, cert);}if (ca != NULL && sk_X509_num(ca) > 0) {fprintf(fp, "***Other Certificates***\n");for (i = 0; i < sk_X509_num(ca); i++)PEM_write_X509_AUX(fp, sk_X509_value(ca, i));}fclose(fp);ret = EXIT_SUCCESS;err:OPENSSL_free(name);X509_free(cert);EVP_PKEY_free(pkey);OSSL_STACK_OF_X509_free(ca);return ret;
}

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661500.shtml

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

相关文章

网络编程练习题(TCP)

基础练习 package test1;import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSoc…

代码随想录day17--二叉树的应用5

LeetCode654.最大二叉树 题目描述&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后…

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…

EtherCAT FP介绍系列文章—UDP gateway

EtherCAT主站上的Mailbox Gateway功能&#xff0c;可以用于将EtherCAT mailbox相关协议从外部设备的工具通过邮箱网关路由到EtherCAT从站设备。在EtherCAT规范中定义的所有邮箱协议在此功能中都可用&#xff0c;例如CoE, FoE, VoE, SoE。 但是&#xff0c;这里特别注意的是Mai…

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Mohist 1.20.2服务器教程,我的世界MOD和插件服开服教程。

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Mohist 1.20.2服务器教程&#xff0c;我的世界MOD和插件服开服教程。 本教程演示安装的MC服是Mohist 1.20.2版&#xff0c;其他版本也可以参考本教程&#xff0c;差别不大。 本教程使用Docker来运行mc服&#xff0c;可以方…

UserWarning: Glyph 39640 missing from current font问题

是因为不支持中文字体导致的&#xff0c;设置为一个支持中文的字体就行了。 另外&#xff0c;上面的改动会引起负号显示为方块&#xff0c;需要额外再加一条设置。 在中文系统上 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 设置为一个支持…

【leetcode刷刷】39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 一开始写的时候没注意到可以重复&#xff0c;注意到可以重复之后就去掉了start_index&#xff0c;但是出现了类似[2,2,3][2,3,2]这种重复。看了题解之后&#xff0c;发现加上start_index&#xff0c;但是进for循环的时候start_index还是i&#xff0c;这样就是既可…

爬虫代理如何被合理使用?静态IP怎么助力网络爬虫采集数据?

随着互联网的发展&#xff0c;网络爬虫作为一种重要的数据采集手段&#xff0c;被广泛应用于各个领域。但在实际使用中&#xff0c;很多用户会遇到IP被封禁、数据采集受限等问题&#xff0c;这些问题往往是由于不合理的代理使用导致的。本文将重点介绍如何合理使用爬虫代理&…

C#,斯特林数(Stirling Number)的算法与源代码

1 斯特林数 在组合数学&#xff0c;斯特林数可指两类数&#xff0c;第一类斯特林数和第二类斯特林数&#xff0c;都是由18世纪数学家James Stirling提出的。它们自18世纪以来一直吸引许多数学家的兴趣&#xff0c;如欧拉、柯西、西尔沃斯特和凯莱等。后来哥本哈根&#xff08;…

Docker容器引擎私有仓库的搭建和管理

目录 一、私有仓库搭建和管理 &#xff08;一&#xff09;搭建本地私有仓库 1.拉取registry镜像 2.修改docker配置文件并重启 3.运行registry容器 4.给镜像打标签 5.上传到私有仓库 6.查看私有仓库的所有镜像 7.从私有仓库拉取镜像 &#xff08;1&#xff09;删除cen…

开源机器人ros 基本概念详细介绍

ROS&#xff08;Robot Operating System&#xff09;的基本概念构成了整个系统的框架和运作方式。以下是一些核心的基本概念&#xff1a; 1. 节点&#xff08;Nodes&#xff09;&#xff1a; - 节点是ROS图中的基本执行单元&#xff0c;它是运行单个任务的一个进程。节点可以…

网络协议 UDP协议

网络协议 UDP协议 在之前的文章中有对UDP协议套接字的使用进行讲解&#xff0c;本文主要对UDP协议进行一些理论补充。 文章目录 网络协议 UDP协议1. 概念2. UDP协议格式2.1 数据报长度2.2 校验和/检验和2.2.1 CRC校验2.2.2 MD5算法 1. 概念 UDP&#xff0c;即User Datagram P…

gitlab操作手册

git操作篇 1. 项目克隆 git clone gitgitlab.test.cn:pro/project1.git2. 项目的提交 注&#xff1a;如果要查看文件的状态可以用git status命令&#xff1a; 如上图所示&#xff0c;文件已经修改了。 3. 项目的推送 git push origin feature/test01注&#xff1a;如果要查…

Qt应用软件【协议篇】modbus-tcp示例

文章目录 APIModbus TCP 主机(客户端)示例Modbus TCP 从机(服务器)示例API QModbusDevice: 所有 Modbus 设备的基类,提供了设备的基本功能,例如连接、断开连接、状态和错误处理。QModbusClient: 用于实现 Modbus 客户端功能的基类。它派生自 QModbusDevice。QModbusServ…

nodejs+vue+ElementUi宠物领养救助网站0w6wc

宠物领养救助平台采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了vue框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户、宠物类别、宠物…

深信服技术认证“SCSA-S”划重点:安全事件管理处置

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信…

MySQL-运维-主从复制

一、概述 二、原理 三、搭建 1、服务器准备 2、主库配置 &#xff08;1&#xff09;、修改配置文件/etc/my.cnf &#xff08;2&#xff09;、重启MySQL服务器 &#xff08;3&#xff09;、登录mysql&#xff0c;创建远程链接的账号&#xff0c;并授予主从复制权限 &#xff0…

shell脚本-免交互

一、Here Document免交互&#xff1a; 1.交互概述&#xff1a; 交互&#xff1a;当计算机播放某多媒体程序的时候&#xff0c;编程人员可以发出指令控制该程序的运行&#xff0c;而不是程序单方面执行下去&#xff0c;程序在接受到编程人员相应的指令后而相应地做出反应。 对于…

铁轨语义分割(Unet结合resnet系列)

数据介绍 一类是图片&#xff0c;一类是图像标签。 引入库&#xff0c;处理数据 import torch.nn as nn import torch import torch.nn.functional as F import os from PIL import Image import torch from torch.utils.data import Dataset import torchvision.transfor…

Unity SRP 管线【第七讲:URP LOD实现以及Reflections反射探针】

目录 一、URP LOD 组件1、LOD Group的使用2、LOD切换原理Cross Fade(淡入淡出)模式Animated Cross-Fading如果未设置Clip&#xff0c;并且Fade Transition Width不为0LOD物体烘培 SpeedTree 模式 二、反射探针1. 获取反射探针数据2. 环境光照明 IBL3. 反射探针&#xff08;Refl…