专家。
我正在使用ssl创建一个python服务器。 所以,我使用gevent.pywsgi.WSGIServer。 但是当我尝试提供密钥文件时...那不是传递给_ssl.c,这是cthon for python。
我的代码在下面..
rack.append(WSGIServer(('', conf.ssl_port), application, backlog=2500,
keyfile=conf.keyfile, certfile=conf.certfile))
当然,keyfile具有正确的值。但是当在_ssl.c的代码
达到这个时load_cert_chain_args
关于该函数的密钥文件argumnet的PyString_Check会导致分段错误。 (您可以确认/Python-2.7.5/Module/_ssl.c + 2695行)。
当我确认load_cert_chain_args' keyfile arg,我可以看到这个日志。
keyfile = keyfile @ entry =(远程0xd231d4未知)
但是当我确认这个记忆的价值时。
x / s 0xd231d4L:"正确的字符串在这里"
我不知道为什么会这样做..虽然在内存中有关于密钥文件的正确价值。
如果这是pagetable问题..也许我无法使用gdb查看密钥文件值。
但我不知道为什么_ssl.c load_cert_chain 会造成Segmemtation 错误( PyString_Check(密钥文件) )。
我不知道虽然我可以看到内存中的值为什么gdb在远程日志中仍然是未知的。
我在Centos 7上使用Python 2.7.5并使用python-gevent 1.0-2.el7)。
THX。
答案 0 :(得分:0)
最后我找到了答案。
当我使用安装在CentOS 7.2中的Python 2.7.5-34时,
将纯字符串作为PyObject传递给_ssl.c python c模块。
为了解决我的问题,下面的链接真有帮助。
https://github.com/gevent/gevent/issues/702
谢谢!