我们的web应用程序托管在.com
域,但在不同的国家使用。该应用程序运行在简单的SSL证书,但我们可以考虑使用EV证书。在每一个国家,我们有不同的本地公司,所以我们考虑让每个国家的EV证书。
是否有可能为nginx
基于通过IP地址或至少通过URL(/en/home/
,/it/...
,/fr/...
路径任一位置服务于不同的SSL EV证书?
谢谢。
据我所知,从单一的Nginx实例提供不同的证书,最好的办法是通过域名。 (理论上,可以发送基于客户端IP不同的证书,但我不认为Nginx的支持此功能,这是不可能的,因为传输路径之前发生SSL协商使用URL路径。)
比方说,您的网站是www.example.com。首先,建立国家或区域特定子域像es.example.com,fr.example.com等。
然后,您可以使用geoip module将流量重定向到相应的子域,如this tutorial。
一旦设置后,可以为每个子域定义不同的nginx服务器模块,每个都有自己的证书。这将使用SNI,确定合适的证书根据所申请的域名SSL协商期间任职。您还需要包括一个默认的通配符证书,因为并不是所有的浏览器都支持SNI。
是的,如果你使用它的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.md和https://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证书链和私钥。