美文网首页程序员
OPENSSL:SSL_CTRL函数与临时公钥设置

OPENSSL:SSL_CTRL函数与临时公钥设置

作者: 黄黄的德鲁伊 | 来源:发表于2015-11-09 14:59 被阅读0次

    使用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数据结构中的具体内容了。

    相关文章

      网友评论

        本文标题:OPENSSL:SSL_CTRL函数与临时公钥设置

        本文链接:https://www.haomeiwen.com/subject/gzxhhttx.html