OPENSSL(SSL_CTRL函数与临时公钥设置)
使用OPENSSL内置的函数,我们可以实现许多功能,比如向OPENSSL的SSL结构中添加一个ECDH的临时公钥,或者一个处理临时公钥的ECDH回调函数。
OPENSSL提供了以下四个函数来实现这一点:
SSL_CTX_set_tmp_ecdh(ctx,ecdh);
//向SSL上下文结构中添加ECDH临时公钥
SSL_set_tmp_ecdh(ssl,ecdh);
//直接向SSL结构中添加ECDH临时公钥
那么,这个函数具体是如何工作的呢?在ssl.h头文件中,我们可以找到以下的定义:
......
#define SSL_CTRL_SET_TMP_RSA2
#define SSL_CTRL_SET_TMP_DH3
#define SSL_CTRL_SET_TMP_ECDH4
......
#define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh
......
#define SSL_set_tmp_ecdh(ssl,ecdh) \
SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
也就是说,对于不同密钥交换算法的公钥设置,都可以通过SSL_ctrl以及SSL_CTX_ctrl这两个参数来进行操作,SSL_ctrl系列函数提供了一个可以操作SSL数据结构中成员的接口,第一个参数是需要作用的SSL或者SSL_CTX数据结构,第二个参数是CTRL命令,用于告诉CTRL需要怎么做,但是只限于ssl.h中规定的内容,第三个参数在我们刚才的例子中暂时为0,第四个参数为传入CTRL的具体参数,例子中为要添加进SSL的临时公钥数据。
SSL_CTRL函数针对于以上宏的工作细节,我们可以在s3_lib.c文件中找到:
long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
{
......
#ifndef OPENSSL_NO_ECDH
case SSL_CTRL_SET_TMP_ECDH:
//接下来为ECDH临时公钥设置的处理细节
【OPENSSL(SSL_CTRL函数与临时公钥设置)】这样,我们就可以自己向CTRL中添加命令,更进一步的操纵SSL及SSL_CTX数据结构中的具体内容了。
推荐阅读
- EP1-ClassLoader
- tcp/ip|网络协议--SSL/TLS
- 计算机网络|网络安全协议SSL的知识梳理
- 网络原理|[网络] SSL/TLS协议的原理机制
- kali_linux渗透测试|SSL、TLS拒绝服务攻击
- DexClassLoader加载apk
- 一文带你了解 SSL 协议
- HTTPS计算机网络SSL加密
- oracle|oracle ohs导入第三方ssl证书
- ssl证书 可以绑定内网ip吗