当前位置: 首页 > 知识库问答 >
问题:

nginx双向SSL到weblogic的反向代理

郭德惠
2023-03-14

我试图使用nginx作为双向SSL/相互SSL的web逻辑的反向代理。

客户端<=双向SSL=>NGINX<=双向SSL=>WebLogic服务器

客户端到NGINX双向SSL工作良好,但在上游连接到web逻辑上出现以下错误。

nginx调试日志:

2014/08/16 22:40:53 [debug] 33741#0: *9 SSL handshake handler: 0
2014/08/16 22:40:53 [debug] 33741#0: *9 SSL_do_handshake: -1
2014/08/16 22:40:53 [debug] 33741#0: *9 SSL_get_error: 2
2014/08/16 22:40:53 [debug] 33741#0: timer delta: 5
2014/08/16 22:40:53 [debug] 33741#0: posted events 0000000000000000
2014/08/16 22:40:53 [debug] 33741#0: worker cycle
2014/08/16 22:40:53 [debug] 33741#0: kevent timer: 59840, changes: 0
2014/08/16 22:40:53 [debug] 33741#0: kevent events: 2
2014/08/16 22:40:53 [debug] 33741#0: kevent: 7: ft:-2 fl:0025 ff:00000000 d:131520 ud:00007FF263805150
2014/08/16 22:40:53 [debug] 33741#0: *9 kevent: 7: ft:-2 fl:0025 ff:00000000 d:131520 ud:00007FF263805150
2014/08/16 22:40:53 [debug] 33741#0: *9 SSL handshake handler: 1
2014/08/16 22:40:53 [debug] 33741#0: *9 SSL_do_handshake: 0
2014/08/16 22:40:53 [debug] 33741#0: *9 SSL_get_error: 1
SSL_do_handshake() failed (SSL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:SSL alert number 40) while SSL handshaking to upstream
client: localhost, server: localhost, request: "GET /customers/~/xxxx/~/xxx/health HTTP/1.1", upstream: "https://xx.xx.xx.xxx:11211/customer-upstream/~/xxx/~/xxx/health/", host: "localhost:12121"

以下是我对上游的nginx配置:

 proxy_cache_path /opt/openresty/nginx/cache levels=1:2 keys_zone=data-cache:8m max_size=1000m inactive=600m;

 proxy_temp_path /opt/openresty/nginx/cache/tmp;

upstream rs_backend {
        server xx.xx.xx.xxx:11211;
    }
server {
        server_name localhost;
        listen 12121 ssl;

        ssl                 on;
        ssl_verify_client on;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        #ssl_protocols  TLSv1;
        #ssl_ciphers  SSL_RSA_WITH_RC4_128_MD5:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!CAMELLIA;
        #ssl_ciphers HIGH:!MD5:!aNULL:!EDH:!CAMELLIA;
        ssl_prefer_server_ciphers   on;
        proxy_ssl_session_reuse off;
        large_client_header_buffers 4 32K;

        ssl_certificate           /etc/ssl/api-cert.pem;
        ssl_certificate_key    /etc/ssl/api-cert.key;
        ssl_client_certificate  /etc/ssl/api-cert.pem;


  location /customers/
        {
           rewrite                 ^/customers/(.*)  /customer-upstream/$1/ break;
           proxy_redirect off;
           proxy_ssl_verify on;
           proxy_ssl_verify_depth 4;
           proxy_ssl_trusted_certificate         /etc/ssl/api-cert-nopass.pem;

           proxy_pass_header Server;
           proxy_http_version 1.1;
           proxy_set_header Connection Keep-Alive;
           proxy_set_header   X-Real-IP        $remote_addr;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
           proxy_set_header Host localhost:11211;
           proxy_set_header Accept 'application/json;v=3';

           proxy_pass https://xx.xx.xx.xxx:11211/;
           #proxy_pass https://rs_backend;
        }

我尝试了各种选项,包括注释下面的配置。

 proxy_ssl_verify on;
 proxy_ssl_verify_depth 4;

如果我尝试使用openssl c_client命令行,我能够连接并获得HTTP get请求的2XX响应。

openssl c_client -connect xx.xx.xx.xxx:11211  -cert api-qaid-nopass.pem

如有任何帮助,不胜感激。

共有1个答案

毛镜
2023-03-14

我添加了对使用证书和密钥的双向/相互身份验证的支持。

请参见拉请求:

https://github.com/nginx/nginx/pull/7

http://mailman.nginx.org/pipermail/nginx-devel/2014-august/005817.html

它在WebLogic11g服务器上进行了验证,该服务器配置为双向SSL。

 类似资料:
  • 我已经在预打包的jetty服务器前面安装了http反向代理。jetty服务器是预配置的应用程序,不太灵活。此Jetty服务器将只接受SSL请求。 我将nginx配置为使用自己的SSL证书在443上侦听SSL流量。然后在nginx后面,我在另一台运行jetty服务器的机器上有另一台服务器,在端口443上有自己的证书。 我的Nginx配置如下所示, 如果我在https上点击jetty服务器,就会得到一

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • 不幸的是,我不是一个很好的系统管理员,遇到了一个让我头痛的问题。 简短的故事是,我在EC2(Ubuntu 14.04.4 LTS)上运行Nginx,以(a)托管我公司的营销网站(https://example.com,碰巧是Wordpress),(b)作为我们在Heroku(https://app.example.com)上运行的Rails应用程序的反向代理,用于某些路径。我们对example.c

  • 我目前正在尝试为客户端界面-服务器交互构建一个API。我已经决定使用ASP.NET核心作为API,Nginx作为托管平台(在Ubuntu 18.04上)。由于ASP.NET使用Kestrel,我们设置了一个反向代理,将请求从Nginx转发到Kestrel——也就是托管API的服务器。我们在NGINX服务器上设置了SSL,但是它没有在Kestrel服务器上设置。 简单地说,我不知道如何在 Kestr

  • 本小节,我们继续学习 Nginx 在 七层反向代理中的其它几种比较常见的情况,比如 web 服务中的 WebSocket 协议的反向代理和 uwsgi 协议的反向代理。 1. WebSocket的反向代理 WebSocket 是目前比较成熟的技术了, WebSocket 协议为创建客户端和服务器端需要实时双向通讯的 webapp 提供了一个选择。服务器可以向浏览器推送相关消息,这样在前端实现的某个