openssl编程经验

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

由于openssl工具集体量大,网上编程示例又杂多,本文旨在给出一个基于openssl应用接口编程思路。


一、适用于

该经验方法适用于所有的,可以通过openssl命令行工具实现,但开发者需要通过代码方式实现的到自己工程的功能。

二、code思路

1.确定接口功能,确定openssl命令该怎么敲

openssl所有的command通过 openssl help列举:
openssl help

openssl常用命令行可参考以下链接:openssl命令速查

比如,我想要生成一个国密SM2算法的私钥,则,应该使用此命令:

openssl ecparam -genkey -name SM2 -out CA.pem

2.通过命令行,找到openssl如何代码实现处

以 上述生成sm2私钥为例:

定位到该命令行功能代码

命令行中ecparam属于openssl子命令,apps下搜索ecparam_main,代码实现在apps/ecparam.c => int ecparam_main(int argc, char **argv)
openssl的命令行工具的代码(目录apps/下) 结构都是一个模板,例如定位enc子命令则搜索enc_main,x509命令搜x509_main

3.分析命令工具代码

根据command参数,掌握自己需实现的功能的逻辑流程

OPTIONS结构体数组列举额了该command所有支持参数,还是以ecparam command为例

const OPTIONS ecparam_options[] = {
    {"help", OPT_HELP, '-', "Display this summary"},
    {"inform", OPT_INFORM, 'F', "Input format - default PEM (DER or PEM)"},
    {"outform", OPT_OUTFORM, 'F', "Output format - default PEM"},
    {"in", OPT_IN, '<', "Input file  - default stdin"},
    {"out", OPT_OUT, '>', "Output file - default stdout"},
    {"text", OPT_TEXT, '-', "Print the ec parameters in text form"},
    {"C", OPT_C, '-', "Print a 'C' function creating the parameters"},
    {"check", OPT_CHECK, '-', "Validate the ec parameters"},
    {"list_curves", OPT_LIST_CURVES, '-',
     "Prints a list of all curve 'short names'"},
    {"no_seed", OPT_NO_SEED, '-',
     "If 'explicit' parameters are chosen do not use the seed"},
    {"noout", OPT_NOOUT, '-', "Do not print the ec parameter"},
    {"name", OPT_NAME, 's',
     "Use the ec parameters with specified 'short name'"},
    {"conv_form", OPT_CONV_FORM, 's', "Specifies the point conversion form "},
    {"param_enc", OPT_PARAM_ENC, 's',
     "Specifies the way the ec parameters are encoded"},
    {"genkey", OPT_GENKEY, '-', "Generate ec key"},
    OPT_R_OPTIONS,
#ifndef OPENSSL_NO_ENGINE
    {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
#endif
    {NULL}
};

参数-genkey -name -out使ecparam_main()中参数解析时switch 依次进入OPT_GENKEY、OPT_NAME、OPT_OUT进行变量初始化,然后就是大规模的if-else走功能流程。
于是,通过阅读该逻辑走向,该功能的代码实现你就完全掌握了。

4.参考代码实现自己的功能

通过 xxx_main的代码,复制粘贴+定制化修改,完成自己的功能or api;

总结

在涉及到密钥、PKI相关开发,都能想到openssl工具集,但从毫无了解到基于openssl进行应用编程开发并不能很快入门-- openssl内容体积比较大: 密码算法基础、命令工具集合、BIO抽象内存管理、各种结构体…什么BIO,X509,PEM 。。。

指路一个博主,他的文章对这些都有很详细的整理,respect.
https://blog.csdn.net/liao20081228/category_7058952.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值