使用 Shadowsocks 的客户端 sslocal 时,有如下报错信息:
1 2 3 4 5 6 7 8 9 10 11 12
| ... ... ... File "/usr/lib/python2.7/site-packages/shadowsocks/crypto/openssl.py", line 76, in __init__ load_openssl() File "/usr/lib/python2.7/site-packages/shadowsocks/crypto/openssl.py", line 52, in load_openssl libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,) File "/usr/lib64/python2.7/ctypes/__init__.py", line 373, in __getattr__ func = self.__getitem__(name) File "/usr/lib64/python2.7/ctypes/__init__.py", line 378, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup
|
查阅相关资料
解决openssl升级到1.1.0后shadowsocks服务报错问题
主要原因: openssl 升级至 1.1.0 后,废弃了EVP_CIPHER_CTX_cleanup 函数,并用 EVP_CIPHER_CTX_reset 函数替代了EVP_CIPHER_CTX_cleanup 函数。
解决方法 :替换程序中对 EVP_CIPHER_CTX_cleanup 的引用。
编辑 报错的文件,如上面示例中的
/usr/lib/python2.7/site-packages/shadowsocks/crypto/openssl.py
将第52行
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
改为
libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)`
将第111行
ibcrypto.EVP_CIPHER_CTX_cleanup(self._ctx)
改为
libcrypto.EVP_CIPHER_CTX_reset(self._ctx)
- 保存文件