mbedTLS(PolarSSL)简单思路和函数笔记(Client端)

OpenSSL一直以来各种被诟病,具体挑了哪些刺,本文就不深究。作为OpenSSL有很多替代,我了解到的有cyaSSL(WolfSSL)和PolorSSL。其中PolarSSL已经被ARM收购了,改名为mbedTLS。本文列举了作为一个SSL client端,应该如何使用mbedTLS。
本文可以搭配我上一篇文章OpenSSL一起看;单独看也没问题
本文地址:https://segmentfault.com/a/1190000005998141

Reference

mbed TLS tutorial - Knowledge Base
ARMmbed / mbedtls / programs / ssl / ssl_client1.c

mbedTLS 基本使用

与传统 socket 的对比

传统的socket-based的程序,依照顺序,作为client要做以下的函数调用:

gethostbyname()socket()connect()write()read()

改成SSL之后,mbedTLS对应上述函数,分别对应为:

gethostbyname()   \ socket()          ->--> mbedtls_net_connect()connect()         /     mbedtls_ssl_handshake()write()           ----> mbedtls_ssl_write()read()            ----> mbedtls_ssl_read()

当然,实际情况下,会使用更多的其他函数。具体(最简单的)流程见下文

数据结构

mbedtls_net_context:目前只有文件描述符,可以用于适配异步I/O库
mbedtls_ssl_context:保存SSL基本数据
mbedtls_ssl_config
mbedtls_ctr_drbg_context
mbedtls_entropy_context:保存熵配置
mbedtls_x509_crt:保存认证信息

Init 阶段

下面是init阶段需要调用的各函数。函数的参数,在调用的时候按照上面的函数类型一个一个传入就行了

mbedtls_net_init()mbedtld_ssl_init()mbedtld_ssl_config_init()mbedtls_ctr_drbg_init()mbedtld_x509_crt_init()mbedtls_entropy_init()mebdtls_ctr_drbg_seed()

其中mebdtls_ctr_drbg_seed()可以指定熵函数。如果回调使用默认的mbedtls_entropy_func的话,可以传入一个初始的熵seed,也可以NULL

Connect 阶段

mbedtls_net_connect():参数是server和端口,均为字符串。server可以使域名或者IP字符串。最后一个参数使用MBEDTLS_NET_PROTO_TCP即可。端口号不仅仅可以传入数字字符串,也可以类似于get_addrinfo函数的protocol参数那样,传入类似于“HTTPS”这样的可读化字符串。

mbedtls_ssl_config_defaults():

适配异步I/O库

经实验,mbedTLS是可以顺利适配libuv和libev的,Good!
什么?问我怎么不适配libevent? 要用libevent的话就用封装了OpenSSL的bufferevent去啦

关键字:linux, c, SSL, polarssl


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部