nginx - Node.js 和 nginx SSL 握手失败

标签 nginx node.js

我正在尝试创建从node.js应用程序到本地托管的nginx服务器的基本SSL连接;它还涉及发送客户端的凭据。握手似乎是成功的,因为从“安全”事件中调用“verifyPeer”验证了这一点。但是,服务器继续只响应 400 响应。

如果我在命令行上使用curl 发出相同的请求,我会得到我期望的结果:

curl -v -E curl-test.crt --cacert ca.crt https://internal.url:7443/some.file

“curl-test.crt”是通过将客户端 key 和证书连接在一起创建的。

这是发生故障所需的最小的 Node.js 代码:

global.util = require('util');

var fs = require('fs'),
    http = require('http'),
    crypto = require('crypto');

var clientCert = fs.readFileSync("tmp/cert.crt", 'ascii'),
    clientKey = fs.readFileSync("tmp/key.key", 'ascii'),
    caCert = fs.readFileSync("tmp/ca.crt", 'ascii');
var credentials = crypto.createCredentials({"key": clientKey, "cert": clientCert, "ca": caCert});

var client = http.createClient(7443, "internal.url", true, credentials);

client.addListener("secure", function() {
  if (!client.verifyPeer()) {
    throw new Exception("Could not verify peer");
  }
});

var request = client.request('GET', '/some.file', {});

request.on('response', function(response) {
  response.on('data', function(body) {
    util.log("body: " + body);
  });
});

request.end();

这是我得到的响应,无论“some.file”更改为什么:

body: <html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.6.32</center>
</body>
</html>

任何调试或解决此问题的帮助都会很棒

最佳答案

您是否在 nginx 错误日志中收到此消息?

2010/11/23 17:51:59 [info] 13221#0: *1 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: testme.local, request: "GET /some.file HTTP/1.1"

如果是这样,您可以通过简单地将“Host” header 添加到 GET 请求中来修复它,如下所示:

var request = client.request('GET', '/some.file', {'Host':'internal.url'});

看起来 nginx 需要 Host header ,而 Node 默认不发送它。可能还有一种方法可以将 nginx 配置为默认为正确的 header 值。

希望有帮助!

关于nginx - Node.js 和 nginx SSL 握手失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260281/

相关文章:

ubuntu - 如何通过不同端口(80 以外)启动 nginx

ruby-on-rails - 如何让 nginx 等待我的上游服务在 Docker Swarm 中启动?

node.js - Visual Studio Code - launch.json 和调试器卡在 Python 上

node.js - 使用 bluebird 进行 Node -redis promise 化

node.js - AWS Lambda 和 Twitter 流

node.js - 从 component.ts 文件加载不同的 component.html 文件?

node.js - 将 HomeKit 设备与 Node-RED 集成

ruby-on-rails - 将多个 Rails 应用程序部署到 DigitalOcean

performance - 移动应用程序的精益 Node.js + Nginx 服务器基础设施?

docker - 如何确保 wordpress 简单静态插件在 traefik 反向代理后面可以 "make requests to itself from 172..."?