Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ssl好难搞啊 #259

Closed
alongL opened this issue Jan 14, 2022 · 4 comments
Closed

ssl好难搞啊 #259

alongL opened this issue Jan 14, 2022 · 4 comments

Comments

@alongL
Copy link

alongL commented Jan 14, 2022

已经看了文章 https://blog.csdn.net/zsxxsz/article/details/103945543
但还是没看懂。

1.windows下如何生成mbedtls 的dll,这个好像mbedtls还没有解决 Mbed-TLS/mbedtls#470
如果使用mbedtls的静态库,如何与acl集成?

2.不知道为什么没有用openssl,感觉openssl的支持更好,文档更丰富,目前已经发布openssl-3.0了,是否有可能改成openssl?
文档里面好像提到有libtls看了一下,也不太像很简单的接口。

3.感觉整个项目的代码有一点点混乱,包罗万象,又支持各个平台,关键库本身还分成了lib_acl lib_fiber lib_fiber_cpp lib_protocal等等,让人眼花缭乱。 是否在将来会统一成一个库,libacl.a,都在一个库里实现多好。

@zhengshuxin
Copy link
Member

zhengshuxin commented Jan 16, 2022

  1. mbedtls 在 windows 下生成 dll 的问题我解决了,放在:https://github.com/acl-dev/third_party/tree/master/mbedtls-2.7.12/visualc/VC2019 ,所以在使用 acl + mbedtls dll 时,建议使用该版本中的 mbedtls;
  2. 最早用过 openssl,但感觉使用起来太笨重了,而且如果支持移动端包也太大,所以使用了更轻量的 mbedtls,将来有时间会集成一下 openssl;另外在 acl 中的 lib_tls 目前暂时处于停滞状态;
  3. 之所以分成这么多库是有历史原因的,在 acl 早期只有 lib_acl,后来因为增加了 http 协议才有了 lib_protocol,这两个都是纯 C 写的,到后来为了提升开发效率,才有了 C++ 开发的 lib_acl_cpp;至于纯 C 的 lib_fiber,它不依赖于 acl 中的任何其它库,是一个独立的网络协程库,主要是为了方便 hook lib_acl 中的 IO 过程(在Unix下连接程序时,需要把 lib_fiber.a 库放在最后一个便可以 hook 前面库所用的 IO API),lib_fiber_cpp 库依赖于 lib_acl, lib_protocol, lib_acl_cpp, lib_fiber,主要是为了提升开发协程应用的效率(在协程方式下使用 acl 中的库,且可以使用 C++)。各个库之间的关系可以参考文章:https://blog.csdn.net/zsxxsz/article/details/88388462?spm=1001.2014.3001.5501
    在UNIX平台下,是把 lib_acl, lib_protocol, lib_acl_cpp 三个库编译成一个库,运行 make 便可以生成这三个库的统一库:libacl_all.a

@alongL
Copy link
Author

alongL commented Jan 18, 2022

感谢郑总的热心答复!
能否把 编译mbedtls为so的命令加到博客里面,不了解mbedtls的人上手会快一点。
默认cmake 只生成.a的静态库。

mkdir build
cmake -DUSE_SHARED_MBEDTLS_LIBRARY=TRUE  .. 

个人希望如果可以的话,将acl简化一下,把网络库的核心独立出来,做成开箱即用的东西,保留http, 其余的aliyun, snmp等等功能都放到samples里面。

@alongL
Copy link
Author

alongL commented Jan 18, 2022

因为项目中已经有CMakeLists.txt了,基本上已经不需要xcode,visualstudio的工程文件了。
我试着删了一下工程文件、samples、doc,瞬间感觉项目变得干净异常。
推荐作者把这些清理一下~~
image

项目中集成了mbedtls的头文件 ,似乎也不是必要的,并且可能是有害的,比如导致无法与新版本mbedtls兼容,所以建议也进行些许修改。

@zhengshuxin
Copy link
Member

之所以费这么大劲针对各个平台都提供了平台上主流的工程文件,主要是为了方便使用者集成到自己的项目中,毕竟并不是所有人都需要做跨平台开发的,虽然cmake提供了跨平台方式,但在各平台上,还是使用平台原生的开发工具更方便,另外,cmake 无法代替IDE的功能,虽然其也可以生成对应平台上的工程文件,但与原生的相比还是差太多了。
在 acl 项目中之所以直接集成了所依赖库的头文件,主要是为了给不需要第三方库的用户提供了一种方便,这样 acl 采用动态加载方式(费不少劲)基本做到这一点了,比如,有人不需要 mbedtls 但需要 mysql 功能,他就可以很方便地使用 acl + mysql 功能而不必关心 mbedtls 的存在,当然这种动态加载的弊端就是不能跟踪第三方库的最新版,在 https://github.com/acl-dev/third_party 提供了 acl 所依赖库的源码,方便使用者进行集成。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants