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_RSA                2
#define SSL_CTRL_SET_TMP_DH              3
#define SSL_CTRL_SET_TMP_ECDH              4
......
#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临时公钥设置的处理细节

这样,我们就可以自己向CTRL中添加命令,更进一步的操纵SSL及SSL_CTX数据结构中的具体内容了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 11,509评论 0 6
  • 一.从OPENSSL握手过程谈起 当我们尝试着建立一个加密连接的时候,首先需要在客户端和服务器之间进行加密套件的协...
    黄黄的德鲁伊阅读 14,612评论 3 9
  • 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和...
    拉肚阅读 7,710评论 0 6
  • 张清的日精进第51天 体验入 当个大家长真心不容易!从老的到小的,从头脑到动作,从思想到外形,样样都得纠偏提炼。 ...
    kiyoi2017阅读 1,514评论 0 5
  • 今天跟大家分享的是《从0到1:开启商业与未来的秘密》这本书,书中内容以创业和商业为主,但关于竞争和垄断的观点,对于...
    kevin习习阅读 968评论 0 4