openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法

文章目录

    • [openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法](#openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法)
    • 概述
    • 笔记
    • 修改openssl实现的前置条件
    • [修改debian12.4下编译好的openssl实现, 将入口参数记录下来](#修改debian12.4下编译好的openssl实现, 将入口参数记录下来)
    • 测试效果
    • 备注
    • END

openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法

概述

在琢磨官方工程中的/test/certs中的2个脚本(setup.sh, mkcert.sh)

这2个脚本有不到500个openssl命令行调用, 应该是openssl内部测试证书操作的脚本.

确定这2个脚本是好东西(将证书操作一网打尽, 弄清了这2个脚本, 就没有不会的证书操作了).

但是脚本调用, 到了调用openssl时, 参数拼接很烦人, 我只想看具体到了openssl的可执行文件, 到底给了啥命令行参数.

有一些参数是用管道给的, 用stdin给的一个buffer代表一个参数文件, 这很烦啊.

官方给用户的正式例子, 都是用 in 参数, 然后给一个文件名. 这样多清爽.

.sh又不熟, 想将.sh改成可以传文件名给openssl的例子, 可能要花多一些时间.

一直在琢磨是否有更好的方法能确定最终的openssl命令行参数, 突然想到, 为啥不直接将openssl实现给改了, 在程序入口, 写几句日志, 将命令行参数记录下来, 这不一了百了啊. 研究啥.sh怎么写啊.

只要确定给了啥命令行参数, 那就好办了.

我已经编译好了在windows下可用的VS2019的openssl.exe的工程, 那就在自己工程中, 舒舒服服的调试好了(openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上), openssl3.2 - 在VS2019下源码调试openssl.exe).

笔记

修改openssl实现的前置条件

已经在debian12.4下, 配置, 编译, 测试, 安装都通过了.

且配置了debian12.4, 让本地普通目录中运行openssl命令行已经好使(openssl3.2 - 编译).

修改debian12.4下编译好的openssl实现, 将入口参数记录下来

参照我重建的win版openssl.exe工程, 可知 main()函数在openssl.c

去debian12.4下原版源码目录中确定是./apps/openssl.c

修改如下, 只在程序入口处, 加了一段日志文件的操作, 将openssl可执行文件的命令行参数附加到日志文件.

c 复制代码
static char *help_argv[] = { "help", NULL };
static char *version_argv[] = { "version", NULL };

int main(int argc, char *argv[])
{
    FUNCTION f, *fp;
    LHASH_OF(FUNCTION) *prog = NULL;
    char *pname;
    const char *fname;
    ARGS arg;
    int global_help = 0;
    int global_version = 0;
    int ret = 0;

    int i = 0;
    FILE* pfLog = NULL;

    // 将入参全部写入文件待调试, 去看.sh太繁琐了
    if (1)
    {
        pfLog = fopen("/home/lostspeed/openssl/my_openssl_log.txt", "a");
        if (NULL != pfLog)
        {
            for (i = 0; i < argc; i++)
            {
                fwrite(argv[i], sizeof(char), strlen(argv[i]), pfLog);
                // 每个参数中间加一个空格
                fwrite(" ", sizeof(char), 1, pfLog);
            }

            // 追加完一次openssl命令行调用, 换一行
            fwrite("\r\n", sizeof(char), 2, pfLog);

            fclose(pfLog);
            pfLog = NULL;
        }
    }

    arg.argv = NULL;
    arg.size = 0;

在正常的工程中, 只进行make, make install

测试效果

在普通目录中运行了2个命令

bash 复制代码
openssl version -a 
openssl --help

查看自己指定的位置确实有日志文件.

bash 复制代码
lostspeed@debian12d4x64:~/openssl$ pwd
/home/lostspeed/openssl
lostspeed@debian12d4x64:~/openssl$ ls -l
总计 488136
-rw-r--r--  1 lostspeed lostspeed        38  1月20日 22:29 my_openssl_log.txt
drwxr-xr-x 26 lostspeed lostspeed      4096  1月20日 21:13 openssl-3.2.0_debian
-rw-r--r--  1 lostspeed lostspeed 482136966  1月20日 21:17 openssl-3.2.0_debian.tar.gz
-rwxr-xr-x  1 root      root       17698352  1月20日 13:55 openssl-3.2.0.tar.gz

查看此日志文件

bash 复制代码
lostspeed@debian12d4x64:~/openssl$ cat ./my_openssl_log.txt 
openssl version -a 
openssl --help 
lostspeed@debian12d4x64:~/openssl$ 

备注

这方法好使.

那我下一步就将setup.sh改成每次只执行一个命令的版本. e.g. setup1.sh, setup2.sh.

知道了具体的命令行操作, 那么就可以去win版的openssl.exe工程去查, 将stdin给出的参数文件流内容, 改为可以落地的参数和文件名.

那我也不用去改debian12.4下的那2个.sh脚本了, 调试强度一下子就降低好多.

END

相关推荐
深耕AI7 天前
Win64OpenSSL-3_5_2.exe【安装步骤】
openssl
看那山瞧那水8 天前
DELPHI 利用OpenSSL实现加解密,证书(X.509)等功能
delphi·openssl
洋哥网络科技18 天前
openssl升级
openssl
Lazy Dave1 个月前
gmssl私钥文件格式
网络安全·ssl·openssl
沉在嵌入式的鱼2 个月前
RK3588移植Openssl库
linux·rk3588·openssl
黑屋里的马2 个月前
ssl相关命令生成证书
服务器·网络·ssl·openssl·gmssl
fangeqin2 个月前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
API开发3 个月前
苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
vscode·python·docker·nodejs·openssl·brew·homebrew
码农不惑3 个月前
Rust使用tokio(二)HTTPS相关
https·rust·web·openssl
liulilittle3 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法并通过OPENSSL加密验证算法正确性。
linux·服务器·c++·算法·安全·加密·openssl