NGINX ssl 上游验证失败

mes*_*600 5 ssl nginx proxypass

[更新]

NGINX 支持的一个错误

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

  1. 好的 - 适用于proxy_ssl_verify off

    溪流 {
          上游 upstream_appsrv{
              服务器 serverA.domain.com:443;
          }
          服务器 {
              听8443;
              proxy_pass https://upstream_appsrv;
                (……)
              proxy_ssl 关闭;
              proxy_ssl_verify 关闭;
          }
    }
    
  2. 不正常 - 一旦我设置proxy_ssl_verify on+ proxy_ssl on

    溪流 {
        上游 upstream_appsrv{
            服务器 serverA.domain.com:443;
        }
        服务器 {
            听8443;
            proxy_pass https://upstream_appsrv;
            (……)
            proxy_ssl 开启;
            proxy_ssl_verify 开启;
        }
    }
    

NGINX 开始抛出有关上游 SSL 证书与后端不匹配的错误:2 upstream SSL certificate does not match "serverB.domain.com" while SSL handshaking to upstream...让我们更改一些内容并转到第三步。

  1. 好的!- 现在一切正常:

    溪流 {
            上游 serverA.domain.com{
                服务器 serverA.domain.com:443;
            }
            服务器 {
                听8443;
                proxy_pass https://serverA.domain.com;
                (……)
                proxy_ssl 开启;
                proxy_ssl_verify 开启;
            }
    }
    

事实证明,不仅server定义必须匹配上游服务器上证书中使用的 CN(显然),而且还upstream upstream_appsrv需要匹配 CN!好的,下一步,让我们添加另一个上游服务器:

  1. 不好...

    溪流 {
            上游 serverA.domain.com{
                服务器 serverB.domain.com:443;
            }
            服务器 {
                听8443;
                proxy_pass https://serverA.domain.com;
                (……)
                proxy_ssl 开启;
                proxy_ssl_verify 开启;
            }
    }
    

一旦 NGINX 连接到 serverB,我们又开始看到相同的错误......即使 serverB 有正确的 CN 设置匹配它的主机名(并且使用与 serverA 相同的 CA),但事实证明 NGINX 尝试将 CN 与upstream定义匹配. 这就是我正在努力解决的问题。