在琢磨官方工程中的/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).
已经在debian12.4下, 配置, 编译, 测试, 安装都通过了.
且配置了debian12.4, 让本地普通目录中运行openssl命令行已经好使(openssl3.2 - 编译).
参照我重建的win版openssl.exe工程, 可知 main()函数在openssl.c
去debian12.4下原版源码目录中确定是./apps/openssl.c
修改如下, 只在程序入口处, 加了一段日志文件的操作, 将openssl可执行文件的命令行参数附加到日志文件.
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个命令
openssl version -a
openssl --help
查看自己指定的位置确实有日志文件.
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
查看此日志文件
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脚本了, 调试强度一下子就降低好多.