Nginx的:根据国家SSL证书

问题描述 投票:0回答:2

我们的web应用程序托管在.com域,但在不同的国家使用。该应用程序运行在简单的SSL证书,但我们可以考虑使用EV证书。在每一个国家,我们有不同的本地公司,所以我们考虑让每个国家的EV证书。

是否有可能为nginx基于通过IP地址或至少通过URL(/en/home//it/.../fr/...路径任一位置服务于不同的SSL EV证书?

谢谢。

ssl nginx
2个回答
1
投票

据我所知,从单一的Nginx实例提供不同的证书,最好的办法是通过域名。 (理论上,可以发送基于客户端IP不同的证书,但我不认为Nginx的支持此功能,这是不可能的,因为传输路径之前发生SSL协商使用URL路径。)

比方说,您的网站是www.example.com。首先,建立国家或区域特定子域像es.example.com,fr.example.com等。

然后,您可以使用geoip module将流量重定向到相应的子域,如this tutorial

一旦设置后,可以为每个子域定义不同的nginx服务器模块,每个都有自己的证书。这将使用SNI,确定合适的证书根据所申请的域名SSL协商期间任职。您还需要包括一个默认的通配符证书,因为并不是所有的浏览器都支持SNI。


0
投票

是的,如果你使用它的LUA后端与SSL的一部分,你可以使用ssl_certificate_by_lua_block来决定要基于客户端发送的,就像它的IP地址的数据揭露,看看raw_client_addr功能的证书。

您不能访问相关网址什么,因为这是在其数据发生在TLS交换远远晚HTTP协议。在最好的情况,你可以访问的主机名(网站名),在TLS握手的SNI部分的客户端请求。

对于所有的细节:https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/ssl.mdhttps://github.com/openresty/lua-nginx-module/#ssl_certificate_by_lua_block

一些片段:

ssl_certificate_by_lua_block

语法:ssl_certificate_by_lua_block {LUA脚本}

该指令运行用户Lua代码时NGINX即将开始为下游SSL(HTTPS)连接的SSL握手。

它是用于设定SSL证书链和在每个请求基础的相应的私钥是特别有用的。

和:

raw_client_addr

语法:ADDR_DATA,ADDR_TYPE,ERR = ssl.raw_client_addr()

返回当前SSL连接的原始客户端地址。

前两个返回值是表示所述地址数据和地址类型,分别字符串。地址值是根据所述地址类型的值不同的解释:

unix : The address data is a file path for the UNIX domain socket.
inet : The address data is a binary IPv4 address of 4 bytes long.
inet6 : The address data is a binary IPv6 address of 16 bytes long.

并为网站名称:

server_name

语法:姓名,ERR = ssl.server_name()

背景:任何

返回TLS SNI(服务器名称指示)名客户端设置。返回nil当客户端不设置。

在失败的情况下,它返回零和一个字符串描述错误。

通常我们用这个名字SNI的域名(如www.openresty.org)识别当前的网站在加载该网站的相应的SSL证书链和私钥。

© www.soinside.com 2019 - 2024. All rights reserved.