Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NGINX ssl上游验证失败_Ssl_Nginx_Proxypass - Fatal编程技术网

NGINX ssl上游验证失败

NGINX ssl上游验证失败,ssl,nginx,proxypass,Ssl,Nginx,Proxypass,[更新] 这需要NGINX支持 我使用了NGINX网站的默认配置文件(但并没有双向身份验证),以便通过SSL在四个上游应用服务器之间实现负载平衡,并将代理\u SSL\u verify设置为on。是的,所有上游服务器都有CN与其主机名匹配的有效证书,并且CA已放置在具有适当权限的NGINX服务器上,并在NGINX.conf文件中设置。以下是我的发现(删除了配置的其余部分,因为它不相关): 正常-使用代理服务器\u ssl\u验证关闭: stream { upstream upstre

[更新]

这需要NGINX支持

我使用了NGINX网站的默认配置文件(但并没有双向身份验证),以便通过SSL在四个上游应用服务器之间实现负载平衡,并将
代理\u SSL\u verify设置为
on
。是的,所有上游服务器都有CN与其主机名匹配的有效证书,并且CA已放置在具有适当权限的NGINX服务器上,并在NGINX.conf文件中设置。以下是我的发现(删除了配置的其余部分,因为它不相关):

  • 正常-使用代理服务器\u ssl\u验证关闭
  • stream { upstream upstream_appsrv{ server serverA.domain.com:443; } server { listen 8443; proxy_pass https://upstream_appsrv; (...) proxy_ssl off; proxy_ssl_verify off; } } NGINX开始抛出有关上游SSL证书与后端不匹配的错误:
    2上游SSL证书与“serverB.domain.com”不匹配,而SSL与上游握手…
    让我们更改一些内容并转到第三步

  • 好的现在一切正常:

    stream { upstream serverA.domain.com{ server serverA.domain.com:443; } server { listen 8443; proxy_pass https://serverA.domain.com; (...) proxy_ssl on; proxy_ssl_verify on; } }

  • 一旦NGINX连接到serverB,我们就会再次看到相同的错误。。。尽管serverB已经获得了与主机名匹配的正确CN集(并且使用了与serverA相同的CA),但结果证明NGINX尝试将CN与上游定义进行匹配。这就是我试图解决的问题。

    正确的HTTPS证书验证包括检查证书是否由受信任的CA签名以及证书中的名称(CN、SAN)匹配用作目标的域名。在这种情况下,如何使用SSL和验证在四个后端服务器之间进行负载平衡?我无法理解您的参数。如果访问backend1.example.com,它将检查证书是否与此完全匹配,即backend1.example.com。backend2.example.com等也一样。如果要使其使用其他名称进行检查,请配置
    代理\u ssl\u name
    以覆盖用于访问服务器的检查和SNI扩展。如果所有上游服务器都具有与其DNS名称和您用于指定服务器的名称相匹配的证书,则不应进行验证这可能是个问题。但是,您抱怨它失败了,因为它验证了CN并失败了,这意味着CN与您配置的名称不匹配。因此,我的结论是DNS名称与证书不匹配。感谢您对问题的详细描述。基于此,我想说这是一个bug,至少在您使用的nginx版本中是这样。如果这不适用于最新版本的nginx,我建议使用您问题中的详细信息将其报告为bug。 stream { upstream serverA.domain.com{ server serverA.domain.com:443; } server { listen 8443; proxy_pass https://serverA.domain.com; (...) proxy_ssl on; proxy_ssl_verify on; } } stream { upstream serverA.domain.com{ server serverB.domain.com:443; } server { listen 8443; proxy_pass https://serverA.domain.com; (...) proxy_ssl on; proxy_ssl_verify on; } }