微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获得对PyOpenSSL的NPN支持?

如何解决如何获得对PyOpenSSL的NPN支持?

我有一个使用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 available

PyOpenSSL的当前版本为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)"                                                                                                                                                          
0

openssl版本的PyOpenSSL是否针对定期更新而构建,以便我最近安装的这些版本具有不同的openssl版本?还是我对它的工作方式感到困惑,而PyOpenSSL是否以某种方式使用了一些本地的openssl版本?

为简洁起见,我要问的问题是:如何获得具有NPN支持的PyOpenSSL版本?

解决方法

PyOpenSSL不随内置版本的openssl一起提供。相反,它依赖于cryptography Python模块。如果我将密码学的版本固定为2.8 ,则PyOpenSSL版本19.1.0将使用具有NPN支持的openssl版本:

$ python -c "import OpenSSL; print(OpenSSL._util.lib.Cryptography_HAS_NEXTPROTONEG)"
1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。