2015-04-02 121 views
0

Ubuntu的14.04和12.04(所有测试的),64位 PIP安装龙卷风(版本4.1)龙卷风服务器错误HTTPS

curl -X POST -v -k https://remote_ip:8080

错误如下: ```

ERROR:tornado.application:Exception in callback (<socket._socketobject object at 0x7fb670a4ad00>, <function null_wrapper at 0x7fb670a05aa0>) 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 840, in start 
    handler_func(fd_obj, events) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper 
    return fn(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 223, in accept_handler 
    callback(connection, address) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/tcpserver.py", line 225, in _handle_connection 
    do_handshake_on_connect=False) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 470, in ssl_wrap_socket 
    return ssl.wrap_socket(socket, **dict(context, **kwargs)) 
    File "/usr/lib/python2.7/ssl.py", line 489, in wrap_socket 
    ciphers=ciphers) 
    File "/usr/lib/python2.7/ssl.py", line 243, in __init__ 
    ciphers) 
SSLError: _ssl.c:295: Both the key & certificate files must be specified 

我的服务器代码如下所示: ```

import tornado 
import tornado.web 
import tornado.httpserver 
import tornado.ioloop 

class Docker(tornado.web.RequestHandler): 
    def post(self, *args, **kwargs): 
     self.write('1\n') 

application = tornado.web.Application(
    handlers=[ 
     (r'/', Docker), 
    ], 
    debug=True, 
) 

if __name__ == '__main__': 
    ssl_options={'certfile': 'certificate.crt', 
       'keyfile': 'privateKey.key'}, 
    srv = tornado.httpserver.HTTPServer(application, xheaders=True, ssl_options=ssl_options) 
    srv.bind(8080) 
    srv.start() 
    tornado.ioloop.IOLoop.instance().start() 

请注意,我使用OpenSSL生成证书和密钥文件:

openssl genrsa -out privkey.pem 2048

openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

特别是,当我加入一个钥匙插入ssl_options字典,cert_reqs = ssl.CERT_NONE,enven多怪错误出现了:

文件/usr/local/lib/python2.7/dist-packages/tornado/netutil.py: return ssl.wrap_socket(socket, **dict(context, **kwargs)) 词典更新序列元素#0具有长度1 2是必需的

我真的非常渴望让我的龙卷风应用程序在HTTPS下正常工作,你能帮忙吗?

回答

1

在定义ssl_options之后,您有一个额外的逗号。这使得ssl_options元组包含一个字典,而不是一个字典(请参阅Python tuple trailing comma syntax rule)。删除,并应该工作。

+0

非常感谢你,我对这种可耻的疏忽感到非常羞愧...... – user3201982 2015-04-03 16:01:03

+0

不用担心;这是一个容易犯的错误,而且一旦发生这种情况可能非常棘手。 – 2015-04-03 17:19:54