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
单IP的nginx tls直通不基于SNI?_Nginx_Ssl_Kubernetes_Tls1.2_Nginx Reverse Proxy - Fatal编程技术网

单IP的nginx tls直通不基于SNI?

单IP的nginx tls直通不基于SNI?,nginx,ssl,kubernetes,tls1.2,nginx-reverse-proxy,Nginx,Ssl,Kubernetes,Tls1.2,Nginx Reverse Proxy,我部署了一个nginx反向代理。我几乎没有什么服务 服务A:https服务,其自己的证书在端口8080上运行 服务B:https服务,其自己的证书在端口8080上运行 我们只有一个通过nginx和IP地址(而不是dns名称)进入应用程序的入口点。 我们想做基于路径的路由。如果请求了/servicea,我们需要将请求转发给服务A,并且证书需要是服务A的证书。服务B也是如此 探索了基于SNI的解决方案,但它基于主机名工作。如何在nginx中实现上述配置 server { listen

我部署了一个nginx反向代理。我几乎没有什么服务

  • 服务A:https服务,其自己的证书在端口8080上运行
  • 服务B:https服务,其自己的证书在端口8080上运行
  • 我们只有一个通过nginx和IP地址(而不是dns名称)进入应用程序的入口点。 我们想做基于路径的路由。如果请求了/servicea,我们需要将请求转发给服务A,并且证书需要是服务A的证书。服务B也是如此

    探索了基于SNI的解决方案,但它基于主机名工作。如何在nginx中实现上述配置

    server {
            listen 80 default_server;
            listen [::]:80 default_server ipv6only=on;
    
            listen 443 ssl;
    
            root /usr/share/nginx/html;
            index index.html;
    
            server_name localhost;
            ssl_certificate /etc/nginx/ssl/tls.crt;
            ssl_certificate_key /etc/nginx/ssl/tls.key;
    
            location / {
                    try_files $uri $uri/ =404;
            }
            location /servicea/ {
                proxy_pass https://servicea:8080/;
    
            }
    
    }
    

    TL;你想要的是不可能的

    TLS passthrough意味着nginx没有终止TLS连接,而只是传递原始数据。通过这种方式,客户端使用最终服务器执行客户端到服务器的TLS,而不是客户端到nginx+nginx到服务器


    但是,在TLS通过的情况下,nginx无法看到TLS连接内部的HTTP请求,因为它是客户机到服务器加密的。由于路径仅在此HTTP请求内,nginx无法执行任何基于路径的路由。

    如果没有dns,是否有其他解决方案?因为只有一个入口。@Tech_Lover:为了做出决定,你需要在连接或请求方面有所不同。如果IP是相同的,域名是相同的,那么实际上没有什么不同,因此无法做出决定。如果我们将servicea证书的副本复制到nginx it self上呢。所有请求都可以在nginx终止。根据路径,我们可以返回特定的证书吗?@Tech_Lover:TLS握手包括已经发送服务器证书。HTTP请求仅在成功的TLS握手后发送,因此路径仅在服务器证书已发送后才知道。不可能再发送另一个证书。不过,现在可以根据bath将此请求路由到正确的服务器。但这对客户端是透明的,即从客户端的角度看不到任何新证书。这也不再是TLS传递,即,它是客户端到nginx和nginx到服务器的加密,而不是客户端到服务器的加密。