是这样的,之前利用搬瓦工搭建的VPS过期了,最近搞了一个AWS,也就是利用亚马逊云服务搭建的VPS,遇到的一个棘手的问题;
具体报错
AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup
load_openssl()
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py", line 52, in load_openssl
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
File "/usr/lib/python2.7/ctypes/__init__.py", line 379, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 384, 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
原因
仔细查看报错原因:在Python2.7中的openssl
文件中,下面这个函数没有定义,具体就是这个哥们:
EVP_CIPHER_CTX_cleanup
更深层的是是由于在openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup函数,要用这个函数EVP_CIPHER_CTX_reset()
代替;
解决办法
打开openssl文件
用vim打开文件:((以下路径可以根据自己的系统情况自行修改))
vim /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py
搜索关键字并修改
直接搜索关键字:EVP_CIPHER_CTX_cleanup
,一共有2处;
进入编辑模式将
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
改为
libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)
其实就是把 cleanup
改为reset
,就可以了;
保存并退出,重新启动就行;
完美解决;
如果想免费科学上网,点击这个文章;
网友评论