解决OpenWRT下python出现的‘md_rand.c: 322: ssleay_rand_add: Assertion `md_c[1] == md_count[1]’ failed’ 错误

  • by

在路由器刷了 OpenWRT系统后,可以运行某python应用,但经常会出现错误提示

<code>……python: md_rand.c: 322: ssleay_rand_add: Assertion `md_c[1] == md_count[1]' failed
</code>

然后程序终止运行。

根据hongrui的日志
中的说明,原因是

编译openssl的CFLAGS没有设置为thread safe,多线程同时调用libcrypto的RAND_add()函数会出断言错误。SSL_connect()和SSL_accept()都会调用RAND_add()。

需要使用线程安全重新编译libssl,编译时

<code>-DOPENSSL_THREADS -pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE
</code>

arcpp.zju把编译好的二进制文件(target-mips_r2_uClibc-0.9.33.2-libopenssh-threaded.tar)打包了,下载后放在 libssl.so所在的目录,备份原libssl.so,libcrypto.so文件,使用新的libssl.so,libcrypto.so文件即可

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.