安装了 Nginx+PHP7 后,发现 SS服务器不能用了,试图重新启动 ss,结果报错如下:
INFO: loading config from ss.json 2016-12-14 22:47:50 INFO loading libcrypto from libcrypto.so.1.1 Traceback (most recent call last): File “/usr/local/bin/sslocal”, line 11, in sys.exit(main()) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/local.py”, line 39, in main config = shell.get_config(True) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py”, line 262, in get_config check_config(config, is_local) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py”, line 124, in check_config encrypt.try_cipher(config[‘password’], config[‘method’]) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 44, in try_cipher Encryptor(key, method) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 83, in init random_string(self._method_info[1])) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 109, in get_cipher return m[2](method, key, iv, op) File “/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py”, line 76, in init 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 375, in getattr func = self.getitem(name) File “/usr/lib/python2.7/ctypes/init.py”, line 380, in getitem func = self._FuncPtr((name_or_ordinal, self)) AttributeError: /usr/lib/x86_64-<a href="https://www.uu63.com/tag/linux/" title="查看更多关于 Linux 的文章" target="_blank">Linux</a>-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup
这个问题是由于在 openssl1.1.0 版本中,废弃了 EVP_CIPHER_CTX_cleanup 函数,如官网中所说:
EVP_CIPHER_CTX was made opaque in OpenSSL 1.1.0. As a result, EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup() disappeared.
EVP_CIPHER_CTX_init() remains as an alias for EVP_CIPHER_CTX_reset().
修改方法:
1,用 vim 打开文件:
vim /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py
(该路径请根据自己的系统情况自行修改,如果不知道该文件在哪里的话,可以使用 find 命令查找文件位置)
2,跳转到 52 行(shadowsocks2.8.2 版本,其他版本搜索一下 cleanup)
3, 进入编辑模式
4,将第 52 行 libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
改为 libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)
5,再次搜索 cleanup(全文件共 2 处,此处位于 111 行),将 libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx) 改为 libcrypto.EVP_CIPHER_CTX_reset(self._ctx)
6,保存并退出
7, 启动 shadowsocks 服务:
service shadowsocks start
或
sslocal -c ss
配置文件目录
———————————-
某些 update 操作后,关于 shadowsocks 服务报错问题
问题解决