gpt4 book ai didi

ssl - nginx 代理传递给 sslv3 上游

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:11 25 4
gpt4 key购买 nike

我正在努力使用 nginx 代理到 SSL 上游。我意识到代理到 HTTPS 是浪费,但这是我的设置,有时直接访问 API,其他时候我使用 nginx 来服务 JS 应用程序,它也是 API、CORS 和浏览器安全的客户端要求 JS应用程序与提供应用程序的域相同的域进行通信:

 +--------------------+                      +---------------------+
| |+-------------------->| |
| Pure HTTP API Host | | CLI Tool API Client |
| |<--------------------+| |
+--------------------+ +---------------------+
| ^ (:3152)
| |
| | | +---------------------+
| +--------------------------------| |
| | | Javascript App |
+---------------------------------->| |
| +---------------------+
|

nginx proxy for CORS

说完这些,下面是堆栈。 API 主机是用 GoLang 编写的,使用来自 StartSSL 的签名证书提供服务:

$ openssl s_client -ssl3 -connect local.api.theproject.io:3251
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: E021B27717F5A4
Key-Arg : None
Start Time: 1377589306
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)

我已经截断了那个输出,但足以说明 Go 的 ListenAndServeTLS似乎只适用于 SSLv3,因为以下失败:

$ openssl s_client -connect local.api.theproject.io:3251
CONNECTED(00000003)
35899:error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version:/SourceCache/OpenSSL098/OpenSSL098-47.1/src/ssl/s23_clnt.c:602:

这样nginx出来的问题就很清楚了:

2013/08/27 09:30:21 [error] 35674#0: *3 kevent() reported that connect() failed (61:
Connection refused) while connecting to upstream, client: 127.0.0.1, server:
local.www.theproject.io, request: "GET / HTTP/1.1", upstream: "https://[::1]:3251//",
host: "local.www.theproject.io:4443"
2013/08/27 09:30:21 [error] 35674#0: *3 SSL_do_handshake() failed (SSL: error:1407742
E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version) while SSL handshaking
to upstream, client: 127.0.0.1, server: local.www.theproject.io, request: "GET /
HTTP/1.1", upstream: "https://127.0.0.1:3251//", host: "local.www.theproject.io:4443"

(注意:我在这里使用 [::1],但这并不重要,它也会失败,当然在 127.0.0.1)

因此问题是,缺少什么:

  proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass https://local.api.theproject.io:3251/;

为了在内部使用 SSLv3 使其正确代理?

最佳答案

您是否尝试过“ssl_ciphers ALL;”?

虽然不推荐这样做(因为这允许使用弱密码),但这会缩小问题的范围。如果这不起作用,很可能是您使用的 openssl 没有合适的密码来完成与您的 Go 服务器的 SSL 握手。

请注意,Go 的 tls 包仅“部分”实现,并且 supported ciphers非常有限。

有两种解决方法:

  1. 您必须升级您的 openssl 版本以支持已经实现的 Go 的 tls 包。然后,当然,重新编译您的 nginx。
  2. 您必须通过添加适当的 suite ids 来修补 tls 包以支持您当前的 openssl 密码 提供的任何内容。到 tls/cipher_suites.go 中的 cipherSuites(我认为)

关于ssl - nginx 代理传递给 sslv3 上游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com