系统信息
$ cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
$ uname -a
Linux lb-cam-11 3.10.0-1160.36.2.el7.x86_64 #1 SMP Wed Jul 21 11:57:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ python --version
Python 3.7.1
$ openssl version
OpenSSL 1.0.1h 5 Jun 2014
>>> cherrypy.__version__
'18.1.0'
>>> import ssl
>>> [(ele, sys.modules[ele]) for ele in sys.modules if 'ssl' in ele]
[('ssl',
<module 'ssl' from '/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/ssl.py'>),
('_ssl',
<module '_ssl' from '/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so'>)]
>>>
>>> cheroot.__version__
'6.5.4'嗨
我正在尝试设置一个使用https的cherrypy服务器。
我使用的与ssl相关的cherrypy配置如下所示:
server_config={
'server.socket_host': chrysocketserver,
'server.socket_port':int(chrysocketport),
'server.ssl_module':'pyopenssl',
'server.ssl_certificate':sslcertificate,
'server.ssl_private_key':privatekey,
'server.ssl_certificate_chain':certificatechain,
}
cherrypy.config.update(server_config)对于小页面,这看起来很好,但是当我尝试加载一个大页面时(我还没有弄清楚问题在什么时候开始发生),cheroot后端(我对此一无所知)抛出了一个异常,看起来如下:
Traceback (most recent call last):
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/server.py", line 1252, in communicate
req.respond()
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/server.py", line 1056, in respond
self.server.gateway(self).respond()
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/wsgi.py", line 147, in respond
self.write(chunk)
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/wsgi.py", line 228, in write
self.req.write(chunk)
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/server.py", line 1112, in write
self.conn.wfile.write(chunk)
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/makefile.py", line 36, in write
self._flush_unlocked()
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/cheroot/makefile.py", line 45, in _flush_unlocked
n = self.raw.write(bytes(self._write_buf))
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/socket.py", line 607, in write
return self._sock.send(b)
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1729, in send
self._raise_ssl_error(self._ssl, result)
File "/tools/oss/packages/x86_64-centos7/python/3.7.1/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1616, in _raise_ssl_error
raise WantWriteError()
OpenSSL.SSL.WantWriteError(部分页面已加载,但并非全部加载)
有人见过这个问题吗?知道是什么引起的吗?表面上看,被写入的套接字看起来是不可写的(因为缓冲区已经满了?)当它遇到SSL.WantWriteError时,它只会引发一个异常(而不是等待和再次尝试)。但我在读这本书的时候可能太天真了。
有人知道我该如何解决这个问题吗?
您错误地假设stdlib ssl
是的,在发帖后,我注意到了这一点,并回复为一个答案(重复如下),它被删除了(可能是因为它实际上不是一个答案)--实际使用的版本是120万:
抱歉-我发布的ssl版本只是openssl的输出,但是python使用的是更高版本(1.0.2m):
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2m 2 Nov 2017'这也太老了吗?(我相信它支持TLS 1.2,但我不知道它支持什么密码器或其他)
我确实认为这不太可能是ssl问题,因为很好地加载了小页面。
无论哪种情况,在这种环境中,对于所使用的ssl版本,我都束手无策。为了进行测试,我需要在本地机器上构建python + openssl (以及任何其他依赖项),所以可能还需要一段时间才能找到时间来测试它。
发布于 2022-02-08 16:04:35
最后回答我的问题。
在pyopenssl ssl_module中似乎存在一个与OpenSSL.SSL.WantReadError和OpenSSL.SSL.WantWriteError的处理方式有关的bug,如这里所记录的:https://github.com/cherrypy/cheroot/issues/245
如果我使用“内置”模块配置cherrypy,如下所示:
server_config={
'server.socket_host': chrysocketserver,
'server.socket_port':int(chrysocketport),
'server.ssl_module':'builtin',
'server.ssl_certificate':sslcertificate,
'server.ssl_private_key':privatekey,
'server.ssl_certificate_chain':certificatechain,
}
cherrypy.config.update(server_config)它工作得很好(至少在我的环境中)
https://stackoverflow.com/questions/70974970
复制相似问题