基于OpenSSL的HTTPS通信C++实现 (4)

  查看资源使用情况,SSL Server端的内存使用一直在增长,疑似有内存泄漏,不过pmap -d查看某一项anon内存达到近18MB时不再增长,说明可能不是内存泄漏,只是部分内存被openssl当作cache使用了。这个问题网上没找到解决办法。从struct ssl_ctx_st结构体定义发现端倪,再从nginx源码中发现了SSL_CTX_remove_session(),于是在SSL_free()之前加上SSL_CTX_remove_session()。session复用可以提高SSL通信效率,不过Nebula暂时不需要。

  这种测试方法把NebulaInterface作为SSL服务端,NebulaLogic作为SSL客户端,同时完成了Nebula框架SSL服务端和客户端功能测试,简单的压力测试。Nebula框架的SSL通信测试通过,也可以投入生产应用,在后续应用中肯定还会继续完善。openssl真的难用,难怪被吐槽那么多,或许不久之后的Nebula版本将用其他ssl库替换掉openssl。

5. 结束

  加上SSL支持的Nebula框架测试通过,虽然不算太复杂,但过程还是蛮曲折,耗时也挺长。这里把Nebula使用openssl开发SSL通信分享出来,希望对准备使用openssl的开发者有用。如果觉得本文对你有用,别忘了到Nebula的Github或码云给个star,谢谢。

<br/>

参考资料:

基于OpenSSL实现的安全连接

SSL API文档

Https协议详解

HTTPS是大势所趋?看腾讯专家通过Epoll+OpenSSL在高并发压测机器人中支持https

openssl 编程入门(含完整示例)

SSL连接建立过程分析

SSL socket 通讯详解

HTTPS从原理到应用(三):SSL/TLS协议

SSL/TLS 握手优化详解

非阻塞/异步(epoll) openssl

两个基于openssl的https client例子

OpenSSL编程初探1 --- 使用OpenSSL API建立SSL通信的一般流程简介

OpenSSL编程初探2 --- 关于证书文件的加载

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdwzw.html