AttributeError:“上下文”对象没有属性“wrap_socket”

Posted

技术标签:

【中文标题】AttributeError:“上下文”对象没有属性“wrap_socket”【英文标题】:AttributeError: 'Context' object has no attribute 'wrap_socket' 【发布时间】:2015-04-19 04:33:52 【问题描述】:

我正在尝试设置一个使用 OpenSSL 上下文的 Flask 服务器。 但是,由于我将脚本移动到不同的服务器上,因此无论我使用的是 Python 2.7 还是 3.4,也无论我选择了哪种 SSL 方法(SSLv23 / TLSv1/...),它都会不断抛出以下错误:

  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/serving.py", line 602, in inner
    passthrough_errors, ssl_context).serve_forever()
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/serving.py", line 506, in make_server
    passthrough_errors, ssl_context)
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/serving.py", line 450, in __init__
    self.socket = ssl_context.wrap_socket(self.socket,
AttributeError: 'Context' object has no attribute 'wrap_socket'

相应代码如下:

if __name__ == "__main__":
        context = SSL.Context(SSL.SSLv23_METHOD)
        context.use_privatekey_file('key.key')
        context.use_certificate_file('cert.crt')
        app.run(host='0.0.0.0', port=80, ssl_context=context, threaded=True, debug=True)

提前非常感谢您!我很高兴得到任何帮助

【问题讨论】:

【参考方案1】:

从 0.10 开始,Werkzeug 不再支持 OpenSSL 上下文。做出这个决定是因为在 Python 版本中支持 ssl.SSLContext 更容易。您可以选择重写此代码:

if __name__ == "__main__":
    context = ('cert.crt', 'key.key')
    app.run(host='0.0.0.0', port=80, ssl_context=context, threaded=True, debug=True)

请参阅http://werkzeug.pocoo.org/docs/latest/serving/ 了解所有可能性。

【讨论】:

注意crtkeycontext 元组中的顺序很重要。 收到此错误:'tuple' object has no attribute 'wrap_socket'

以上是关于AttributeError:“上下文”对象没有属性“wrap_socket”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:模块'tensorflow'没有属性'__version __'

AttributeError: 'RDD' 对象没有属性 'show'

AttributeError:“NumpyArrayIterator”对象没有属性“类”

AttributeError:“模块”对象没有属性“WebSocketApp”

AttributeError: 'float' 对象没有属性 'split'

AttributeError:'list' 对象没有属性 'size'