Openssl被认为是最好的第三方加密和签名库,没有之一。
但在最近的一个应用却发现了Openssl对线程的支持非常不好。比如开启200个线程对同一个字符串进行RSA_private_encrypt签名操作,就会发现应用程序经常会堆栈异常。如果使用线程锁来控制,就没有问题了。
于是决定查找Openssl是否支持多线程。于是下载了对应的源码openss-0.9.8h,查看代码会发现其中使用的malloc的进程变量来存储信息,而这些变量没有显示的线程保护。
在Openssl的头文件中有一个flag标志RSA_FLAG_THREAD_SAFE,但是查找整个源码你会发现,这个标志只在定义中,没有实际的使用。或许Openssl计划在之后的版本中添加线程保护,这样就不用开发者自己来做线程保护了。
建议Openssl在没有真正的线程保护之前,取消RSA_FLAG_THREAD_SAFE标志,因为这样会让开发者误以为设置了这个标志就线程安全了。
阅读(4538) | 评论(0) | 转发(0) |