gpt4 book ai didi

python - SNI(服务器名称指示)与 Tornado

转载 作者:行者123 更新时间:2023-12-04 14:55:36 26 4
gpt4 key购买 nike

如标题所述,我想弄清楚如何使用 SNI (服务器名称指示)与 Tornado 网络服务器。

我希望能够根据给定请求的主机名出示特定证书。

最佳答案

在深入研究之后,我找到了使用 ssl.SSLContext 中的 sni_callback 的解决方案。

这将为您提供一个在建立 TLS 握手之前包含主机名的方法。

servername_callback 方法中,您可以根据主机名选择要加载的证书。

工作解决方案
import tornado.ioloop
import tornado.web
import tornado.httpserver
import ssl

class MainHandler(tornado.web.RequestHandler):

def get(self):
self.write('Hello, world')

application = tornado.web.Application([
(r'/', MainHandler)
])

def servername_callback(sock, hostname, cb_context):
# hostname contains the hostname that the client is requesting
print("hostname", hostname)

# now that we have the hostname we can dynamically pick the correct certificate
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# this part is up to you to store via a config file or even in a database
ssl_context.load_cert_chain(certfile="/path/to/cert", keyfile="/path/to/key")

sock.context = ssl_context

if __name__ == '__main__':

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
ssl_context.sni_callback = servername_callback

http_server = tornado.httpserver.HTTPServer(application, ssl_options=ssl_context)
http_server.listen(443)

tornado.ioloop.IOLoop.instance().start()

关于python - SNI(服务器名称指示)与 Tornado ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68089197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com