簡體   English   中英

龍卷風服務器上的SSL錯誤

[英]SSL error on tornado server

我正在嘗試創建一個HTTPS Web服務器。 這是我的代碼......

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。

您不應將SSL用於localhost主機名連接。 SSL + HTTPS使用您的域名證書,並使用它來提供身份驗證。

由於您要連接到localhost ,因此您的主機名(localhost)將與證書上的主機名不匹配,並且您將收到證書錯誤。

有一些方法可以解決這個問題,但我會在本地計算機上使用非SSL(常規HTTP),然后當您推送到服務器(使用正確的域名)時,您可以啟用SSL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM