openssl3.2 - 官方demo学习 - test - certs

文章目录

    • openssl3.2 - 官方demo学习 - test - certs
    • 概述
    • 笔记
    • .sh的执行语句打印的方法
    • 要修改的实际函数
    • 备注
    • END

openssl3.2 - 官方demo学习 - test - certs

概述

官方demos目录有证书操作的例子
在这里插入图片描述
已经做了笔记 openssl3.2 - 官方demo学习 - certs
但是这个demos/certs目录的脚本, 并没有演示如何操作PKCS12证书.

在官方给的程序例子中, 有操作PKCS12证书的工程, 但是却没有配套的PKCS12证书. 这咋弄?
翻了一下openssl源码工程, 发现测试目录中有2个脚本, 非常精彩, 比官方demos目录给出的脚本能操作的证书详细多了. 里面也有PKCS12证书的例子.
在这里插入图片描述
将test/certs目录中除了2个.sh都删掉, 在cygwin64下执行setup.sh, 可以将证书全部生成出来. 不过有报错, 原因是cygwin64中带的openssl是3.0.12, 不是最新版的3.2.
cygwin64升到最新的openssl也不是最新版的3.20.
这个目录是openssl自己测试用的, 证书的操作应该是最全的.

但是, 这2个.sh是bash脚本, 运行起来, 看不到执行了啥命令行(最终执行的都是openssl命令行).
想改一下.sh, 将最终执行的openssl命令行打印出来, 让人眼能看到. 然后我就可以在用windows下的openssl带相同命令行做相同的事情了.

笔记

.sh的执行语句打印的方法

在原有的这2个.sh上, 加了一个简单的测试函数, 测试了好使, 修改的思路就这么定了.

# this funciton test_exec() on mkcert.sh
test_exec()
{# 变量 - 赋值TEST_CMD="ls -l"# 变量 - 打印echo "TEST_CMD = $TEST_CMD"# 变量 - 执行$TEST_CMD 
}
# this call on setup.sh
./mkcert.sh test_exec

在cygwnwin64环境下, 执行如下语句, 可以执行到test_exec()
在程序执行的同时, 将执行的命令行也打印出来了. 这就是我想要的效果.

chenx@ls-Precision3561 /cygdrive/d/my_dev/my_local_git_prj/study/sh
$ ./setup.sh
TEST_CMD = ls -l
total 20
-rwxrwx---+ 1 Administrators chenx 12465 Jan 17 18:24 mkcert.sh
-rwxrwx---+ 1 Administrators chenx   138 Jan 17 18:25 setup.sh

要修改的实际函数

官方原始的脚本, 是执行 ./setup.sh, 间接的调用mkcert.sh(作为脚本库)来干活.
setup.sh中, 都是调用mkcert.sh中的脚本函数, 看不到任何openssl相关的东西

./mkcert.sh genroot "Root CA" root-key root-cert

在mkcert.sh中, 先经过中间函数处理传入的参数, 最终会进入到有openssl最终调用的函数中.
包含openssl最终调用的函数有4个(cert(), req_nocn(), req(), key()), 如下.

key() {local key=$1; shiftlocal alg=rsaif [ -n "$OPENSSL_KEYALG" ]; thenalg=$OPENSSL_KEYALGfilocal bits=2048if [ -n "$OPENSSL_KEYBITS" ]; thenbits=$OPENSSL_KEYBITSfiif [ ! -f "${key}.pem" ]; thenargs=(-algorithm "$alg")case $alg inrsa) args=("${args[@]}" -pkeyopt rsa_keygen_bits:$bits );;ec)  args=("${args[@]}" -pkeyopt "ec_paramgen_curve:$bits")args=("${args[@]}" -pkeyopt ec_param_enc:named_curve);;dsa)  args=(-paramfile "$bits");;ed25519)  ;;ed448)  ;;*) printf "Unsupported key algorithm: %s\n" "$alg" >&2; return 1;;esacstderr_onerror \openssl genpkey "${args[@]}" -out "${key}.pem"fi
}# Usage: $0 req keyname dn1 dn2 ...
req() {local key=$1; shiftkey "$key"local errsstderr_onerror \openssl req -new -"${OPENSSL_SIGALG}" -key "${key}.pem" \-config <(printf "string_mask=%s\n[req]\n%s\n%s\n[dn]\n" \"$REQMASK" "prompt = no" "distinguished_name = dn"for dn in "$@"; do echo "$dn"; done)
}req_nocn() {local key=$1; shiftkey "$key"stderr_onerror \openssl req -new -"${OPENSSL_SIGALG}" -subj / -key "${key}.pem" \-config <(printf "[req]\n%s\n[dn]\nCN_default =\n" \"distinguished_name = dn")
}cert() {local cert=$1; shiftlocal exts=$1; shiftstderr_onerror \openssl x509 -req -"${OPENSSL_SIGALG}" -out "${cert}.pem" \-extfile <(printf "%s\n" "$exts") "$@"
}

对sh编程不熟, 但是能看懂. 小动一下是可以的.
这4个函数最终调用openssl时, 参数给的比较复杂, 如果直接用echo来打印最终的命令行, 试过了, 不好使.
原因是, 这个命令行中有一些即时生成的参数, 如果用echo直接打印, 看不到真正的变量值.

准备将传给openssl的参数再复制给一些中间变量, 最后再将拼好的中间变量再传给openssl, 这样就能打印出命令行了.

准备改这4个函数, 将最终要执行的openssl命令行打印出来, 且能正常执行openssl命令.

备注

在windows下整理了证书操作的参数, 整理成windows命令行, 执行报错.
开始怀疑是这些证书命令是给旧版openssl用的.
为了验证这个问题, 装了一个debian12.4, 然后装了openssl3.2(自己从源码编译的).
执行.\test\certs\中的脚本(将setup.sh拷贝成副本, 改名, 在里面只有一条脚本), 执行时, 只是有警告, 但是执行结果是对的.

lostspeed@debian12d4x64:~/openssl/openssl-3.2.0/test/certs$ ./test2.h 
Warning: Reading cert request from stdin since no -in option is given // !
Certificate request self-signature ok
subject=CN=Root CA

在openssl源码中, 也找到了这句警告.

int x509_main(int argc, char **argv)
{// ...if (reqfile) {if (infile == NULL)BIO_printf(bio_err,"Warning: Reading cert request from stdin since no -in option is given\n");req = load_csr_autofmt(infile, informat, vfyopts,"certificate request input");if (req == NULL)goto end;// ...
}

再研究一下, 看看p12证书怎么用openssl命令行操作.
要是官方例子中给了p12证书的操作例子, 就不用看源码编译, 测试中间操作用的脚本了.

END

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

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

相关文章

安卓屏幕自动息屏时亮度突然变亮

自然息屏流程 USER_ACTIVITY_SCREEN_BRIGHT&#xff08;亮屏&#xff09; → USER_ACTIVITY_SCREEN_DIM&#xff08;DIM&#xff09; → USER_ACTIVITY_SCREEN_DREAM&#xff08;灭屏&#xff09;变化&#xff0c;最终进入ASLEEP后。在息屏时会执行一个变暗的动画 frameworks\…

鸿蒙应用开发-请求语音合成服务获取音频文件

功能介绍&#xff1a; 请求语音合成服务&#xff0c;通过上传语音合成文本&#xff0c;返回音频数据&#xff0c;并保存到本地。这里要说明一下&#xff0c;由于HttpResponse接口给问题&#xff0c;服务的响应类型必须是application/octet-stream&#xff0c;才能正确获取音频…

C# 数据类型与类型转换:包含教程与示例

C# 数据类型 C# 中的变量必须是指定的数据类型&#xff1a; int myNum 5; // 整数&#xff08;整数&#xff09; double myDoubleNum 5.99D; // 浮点数 char myLetter D; // 字符 bool myBool true; // 布尔 string myText "Hello…

【知识---如何进行图像数据的归一化呢(normalize)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言范围归一化均值和标准差归一化&引申总结 前言 在做基于图像的目标检测遇到了图像的归一化操作&#xff0c;为此展开了一定的探讨&#xff1a; 图像归一化…

虚拟机扩容教程

一、打开虚拟机主界面 二、右键鼠标进入设置模式 三、选择扩展 等待扩展结束 4、打开虚拟机&#xff0c;搜索工具GParted 5、接下来根据提示操作即可&#xff08;已经扩容&#xff0c;不方便再次扩容演示&#xff0c;方法可行&#xff09;

vue学习,使用provide/inject通信

提示&#xff1a;组件的provide&#xff0c;可以被其内所有层级的组件&#xff0c;通过inject引用 文章目录 前言一、通信组件二、效果三、参考文档总结 前言 需求&#xff1a;使用provide/inject通信 一、通信组件 1、AA.vue <template><div class"test"…

vue2 省市区联动组件封装

在element ui中有级联选择器el-cascader,其实已经够用了,但是在实际需求中,发现el-cascader如果有三级,数据数组必须得三个才能完全展示,所以不符合实际需求,还是自定义封装吧 需求:省市区联动数组,有多少个显示多少个 这里使用element ui得el-select组件,思路是使用…

反射计数 - 华为OD统一考试

OD统一考试 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 给定一个包含 0 和 1 的二维矩阵, 给定一个初始位置和速度。 一个物体从给定的初始位置触发, 在给定的速度下进行移动, 遇到矩阵的边缘则发生镜面反射无论物体经过 0 还是 1&#xff0c;都不…

css 边框渐变

需求&#xff1a; 普通的div 边框不好看&#xff0c;做一个渐变色 进程&#xff1a; 最简单的当然是做一个内部是白色的边框是渐变色的图&#xff0c;然后使用 background: url("back.jpg")&#xff0c;这样看起来就像是做了一个渐变的边框如果做不了图&#xff0…

美摄视频SDK的HDR格式编辑方案

在当今的视觉媒体时代&#xff0c;高动态范围&#xff08;HDR&#xff09;技术已成为高质量视频内容的标配。为了满足企业对高效、高质量视频处理的需求&#xff0c;美摄科技推出了业界领先的视频SDK&#xff0c;全面支持多种HDR标准的图像视频进行处理。 一、核心优势 HDR全…

Android 13.0 Recent列表不显示某个app

1.概述 在13.0 的系统产品rom定制化开发中,在点击导航栏最近任务列表时,如果做到不显示某个app 呢 一种做法是在app中直接处理 一种做法是在framework中处理 接下来看这两种处理方法 1, app中处理 为该应用AndroidManifest xml文件中主MainActivity设置属性 android:exclu…

重拾计网-第一弹

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾计算机网络 &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错…

vue+springboot的文件上传处理

目录 1.前端&#xff1a; 2.说明 1.示例&#xff1a; 使用前端框架中的上传组件&#xff0c;例如element plus及arco design&#xff0c;要使用自定义的上传属性或者change属性&#xff0c;获取上传的文件信息。 <template><a-drawer :width"600" :visi…

四款坚固耐用、小尺寸、1EDB9275F、1EDS5663H、1EDN9550B、1EDN7512G单通道栅极驱动器IC

1、1EDB9275F 采用DSO-8 150mil封装的单通道隔离栅极驱动器&#xff08;PG-DSO-8&#xff09; EiceDRIVER™ 1EDB 产品系列 单通道栅极驱动器IC具有3 kVrms的输入输出隔离电压额定值。 栅极驱动器系列具有6/-4 ns传输延迟精度&#xff0c;可针对具有高系统级效率的快速开关应…

vue 前端加密解密 CryptoJS

$ npm install crypto-js 安装cryptojs 安装方法 实际使用情况: import CryptoJS from "crypto-js"; //let decrypted CryptoJS.lib.SerializableCipher.decrypt( // CryptoJS.algo.AES, // data.tuituiMobileCrypt, // …

libcurl是一个用于进行网络通信的开源库,提供了各种功能和选项,可以用于发送和接收HTTP请求、FTP操作等

libcurl libcurl是一个用于进行网络通信的开源库&#xff0c;提供了各种功能和选项&#xff0c;可以用于发送和接收HTTP请求、FTP操作、SMTP邮件等。它支持多种协议&#xff0c;包括HTTP、HTTPS、FTP、FTPS、SMTP、POP3、IMAP等。 以下是libcurl库的一些特点和功能&#xff1…

Python 内置数据类型详解

内置数据类型 在编程中&#xff0c;数据类型是一个重要的概念。 变量可以存储不同类型的数据&#xff0c;不同类型可以执行不同的操作。 Python默认内置了以下这些数据类型&#xff0c;分为以下几类&#xff1a; 文本类型&#xff1a;str 数值类型&#xff1a;int、float、…

宠物空气净化器真的有用吗?五款猫用宠物空气净化器测评!

作为一个养猫四年的铲屎官&#xff0c;我不得不说&#xff0c;宠物空气净化器是21世纪养猫人最伟大的神器之一&#xff01; 当我刚开始养猫的时候&#xff0c;我并没有意识到猫毛会成为一个如此头疼的问题。虽然朋友们告诉我要做好心理准备&#xff0c;但我并没有想到家里的猫毛…

最新版git2.43安装、记住用户名和密码以及tortoisegit2.15使用

一、下载git 打开git官网地址&#xff1a;https://git-scm.com/进行下载 下载完安装&#xff0c;一直next就好&#xff0c;如果愿意就可以改下安装路径&#xff0c;改在d盘。 具体可以参考&#xff1a;git安装教程 二、安装完下载小乌龟以及中文语言包 下载地址&#xff1a;…

长期戴耳机的危害有哪些?戴哪种耳机不伤耳朵听力?

长期佩戴耳机可能会出现听力下降、耳道感染等危害。 听力下降&#xff1a;长时间戴耳机可能会导致耳道内的声音过大&#xff0c;容易对耳膜造成一定的刺激&#xff0c;容易出现听力下降的情况。 耳道感染&#xff1a;长时间戴耳机&#xff0c;耳道长期处于封闭潮湿的情况下&a…