龙卷风服务器上的SSL错误

时间:2014-06-12 02:53:25

标签: python ssl certificate tornado

我正在尝试制作HTTPS网络服务器。这是我的代码......

import tornado.escape
import tornado.ioloop
import tornado.web
import tornado.httpserver
import settings
import os
import ssl

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r'/login', LoginPage),
        ]
        args = {
            'template_path': settings.TEMPLATE_PATH,
            'static_path': settings.STATIC_PATH,
            'debug': True,
            'cookie_secret': settings.COOKIE_SECRET,
            'login_url': settings.LOGIN_URL,
        }

        tornado.web.Application.__init__(self, handlers, **args)

class LoginPage(tornado.web.RequestHandler):
    def get(self):
        self.write("SSL. Yay!")


if __name__ == '__main__':
    applicaton = Application()
    ssl_options = {'certfile': os.path.join(settings.SSL_PATH, 'certificate.crt'),
                   'keyfile': os.path.join(settings.SSL_PATH, 'privateKey.key'),
    }
    http_server = tornado.httpserver.HTTPServer(applicaton, ssl_options=ssl_options)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

我使用以下命令生成了我的certificate.crt和privateKey.key ......

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

当我运行服务器并转到localhost:8888 / login时,我收到以下错误...

/usr/bin/python2 /home/user/dev/sslserver/main.py
WARNING:root:SSL Error on 9 ('127.0.0.1', 55303): [Errno 1] _ssl.c:509: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request
WARNING:root:SSL Error on 10 ('127.0.0.1', 55304): [Errno 1] _ssl.c:509: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request
WARNING:root:SSL Error on 9 ('127.0.0.1', 55305): [Errno 1] _ssl.c:509: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request

如果删除ssl_options = ssl_options,网页显示正常。我错过了ssl_options的论据吗?我是新的证书和ssl所以任何关于如何使这项工作的建议将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:7)

您需要明确转到https://localhost:8888(不只是localhost:8888)。如果没有https://前缀,浏览器将发送未加密的http;这是" http请求"来自openssl的错误消息意味着。您无法在同一端口上提供http和https,但您可以在另一个端口上启动第二个没有ssl_options的HTTPServer。

答案 1 :(得分:1)

您不应将SSL用于localhost主机名连接。 SSL + HTTPS使用您的域名证书,并使用它来提供身份验证。

由于您要连接到localhost,因此您的主机名(localhost)将与证书上的主机名不匹配,并且您将收到证书错误。

有一些方法可以解决这个问题,但我只是在本地计算机上使用非SSL(常规HTTP),然后当您推送到服务器(使用正确的域名)时,您可以启用SSL。 / p>