特定域的多个SSL证书-Flask
我有一个目录来存储证书,并将域存储在一个数据库中,其中包含它们的SSL证书路径 例如,我有:特定域的多个SSL证书-Flask,ssl,flask,Ssl,Flask,我有一个目录来存储证书,并将域存储在一个数据库中,其中包含它们的SSL证书路径 例如,我有: certs_dir: - localhost1.pem - localhost1.key - localhost2.pem - localhost2.key 我有两个不同的域,比如localhost1/index和localhost2/index,它们都托管在同一个Flask应用程序上 我希望每个域使用它自己的SSL 有可能吗?如果是的话,怎么办 我不想使用ssl\u上下文运行
certs_dir:
- localhost1.pem
- localhost1.key
- localhost2.pem
- localhost2.key
我有两个不同的域,比如localhost1/index
和localhost2/index
,它们都托管在同一个Flask应用程序上
我希望每个域使用它自己的SSL
有可能吗?如果是的话,怎么办
我不想使用
ssl\u上下文运行flask应用程序,我想在中间件中查找路由的ssl证书,并决定在响应请求时使用哪个证书,从而选择在任何HTTP交换之前显示哪个证书
只有在HTTP交换步骤中,才能在客户端之间交换完整的URL。在此之前,在TLS握手过程中,客户端只发送了它试图联系的服务器的主机名(通过TLS SNI扩展名)
因此,服务器只能基于请求的主机名来决定将哪个证书发送回客户端
因此,不,您的情况是,只有URL中的本地路径发生更改(就像问题的原始版本:localhost/cert1
vslocalhost/cert2
)不能引发单独的证书。如果您使用不同的主机名:realm1.example.com
和realm2.example.com
TLS握手,并因此在任何HTTP交换之前选择要显示的证书,则可以这样做
只有在HTTP交换步骤中,才能在客户端之间交换完整的URL。在此之前,在TLS握手过程中,客户端只发送了它试图联系的服务器的主机名(通过TLS SNI扩展名)
因此,服务器只能基于请求的主机名来决定将哪个证书发送回客户端
因此,不,您的情况是,只有URL中的本地路径发生更改(就像问题的原始版本:localhost/cert1
vslocalhost/cert2
)不能引发单独的证书。如果您使用不同的主机名,您可以这样做:realm1.example.com
和realm2.example.com
谢谢您的回答,不同的域是我想说的,我对问题进行了一些编辑,如果有不同的域,是否可以这样做?如何设置?如果主机名不同,则通常可能是。我不知道您的特定框架是如何实现的。基于Flask和Werkzeug中缺乏此类案例的文档,以及后者中的连接启动方式(请参阅),我认为不可能实现您想要的功能,至少在配置级别不可能。您需要覆盖BaseWSGIServer.\uuuu init\uuuuu
并使用SSLContext.set\u servername\u callback
从Pythonssl
模块获取SNI期间给定的主机名,并在此时建立正确的SSLContext,当客户端正在连接时,另一种选择是在应用程序前面放置一个Web服务器,如nginx或Apache,并让TLS在那里终止。然后,从它到您的应用程序,它是纯HTTP流量,不需要证书。这当然有安全问题。谢谢你的回答,不同的域是我想说的,我编辑了一点问题,如果有不同的域,是否可以这样做?如何设置?如果主机名不同,则通常可能是。我不知道您的特定框架是如何实现的。基于Flask和Werkzeug中缺乏此类案例的文档,以及后者中的连接启动方式(请参阅),我认为不可能实现您想要的功能,至少在配置级别不可能。您需要覆盖BaseWSGIServer.\uuuu init\uuuuu
并使用SSLContext.set\u servername\u callback
从Pythonssl
模块获取SNI期间给定的主机名,并在此时建立正确的SSLContext,当客户端正在连接时,另一种选择是在应用程序前面放置一个Web服务器,如nginx或Apache,并让TLS在那里终止。然后,从它到您的应用程序,它是纯HTTP流量,不需要证书。这当然涉及安全问题。