我有一个使用PyOpenSSL的应用程序。这取决于NPN的使用。这在过去是可行的,但是当我重新创建我的虚拟环境时,构建的openssl PyOpenSSL版本不再支持NPN:
Traceback (most recent call last):
File "/tmp/sbpv/http2/proxy1/test_proxy.py", line 60, in <module>
sys.exit(main())
File "/tmp/sbpv/http2/proxy1/test_proxy.py", line 46, in main
proxy_http2.configure_http2_server(args.listen_port, args.server_port, args.https_pem)
File "/home/bneradt/repos/proxy-verifier/test/autests/gold_tests/autest-site/proxy_http2.py", line 188, in configure_http2_server
context.set_npn_advertise_callback(npn_advertise_cb)
File "/home/bneradt/.local/share/virtualenvs/autests-kCEHOjhw/lib/python3.8/site-packages/OpenSSL/SSL.py", line 650, in explode
raise NotImplementedError(error)
NotImplementedError: NPN not availablePyOpenSSL的当前版本是19.1.0。我回到了PyOpenSSL 19.0.0和18.0.0,但它们似乎都是基于openssl1.1.1h构建的:
$ python -c "import OpenSSL; print(OpenSSL.version.__version__)"
18.0.0
$ python -c "import OpenSSL; print(OpenSSL.SSL.SSLeay_version(OpenSSL.SSL.SSLEAY_VERSION))"
b'OpenSSL 1.1.1h 22 Sep 2020'
$ python -c "import OpenSSL; print(OpenSSL._util.lib.Cryptography_HAS_NEXTPROTONEG)"
0openssl版本PyOpenSSL是针对定期更新而构建的吗?这样我最近安装的这些版本就会有不同的openssl版本吗?或者我对它的工作原理感到困惑,而PyOpenSSL不知何故使用了一些本地的openssl版本?
简而言之,我要问的问题是:如何获得支持NPN的PyOpenSSL版本?
发布于 2020-09-25 05:06:15
PyOpenSSL没有附带openssl的内置版本。相反,它依赖于cryptography Python模块。如果我将密码学的版本固定为2.8openssl,那么PyOpenSSL版本19.1.0使用的是支持NPN的openssl版本:
$ python -c "import OpenSSL; print(OpenSSL._util.lib.Cryptography_HAS_NEXTPROTONEG)"
1https://stackoverflow.com/questions/64054308
复制相似问题