python - Tornado 服务器上的 SSL 错误

标签 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 的新手,因此非常感谢有关如何使这项工作的任何建议。谢谢!

最佳答案

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

关于python - Tornado 服务器上的 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175755/

相关文章:

python - 在 python toolz 中柯里化(Currying) merge_with

Python - 根据值绘制彩色网格

python - “WebDriver”对象没有属性 'navigate'

spring - Apache ActiveMQ 5.10.0 中仅在 Java 项目中通过 SSL 的身份验证和授权问题

node.js - 无法访问本地主机 :3000/

ssl - OpenSSL 自签名证书完全被阻止

permissions - 在 Win Server 2008 中设置证书的私钥权限

sql - 来自 SQL Server 数据库的 WCF 证书存储

python - 无法用 Beautiful Soup 解析 html 表

networking - SSL 洪水故障排除