SSL与节点和使用cURL混淆

我已经将我的安全节点服务器设置为:

var HTTPSOptions = { hostname: config.hostname, cert: fs.readFileSync(config.ssl.cert_path), key: fs.readFileSync(config.ssl.key_path), requestCert: true, rejectUnauthorized: false, passphrase: config.ssl.ca_key_password }; HTTPSOptions.agent = new https.Agent(HTTPSOptions); var httpsServer = https.createServer(HTTPSOptions, app).listen(config.https_port, function () { console.info("HTTPS server running on %d", config.https_port); }); 

我也为我的一个客户端生成了一个client.keyclient.crtclient.csr ,并用服务器的.key.crt签名。

现在,我想从客户端连接到我的API。 阅读cURL如何工作,我用:

 curl --key client.key --cert client.crt:clientPassword mySecureSite.com\api\call 

这工作正常,除了相同的代码将工作,如果我提供任何密钥/证书或任何密码,或者即使我没有提供任何密钥/证书!

有人可以开导我吗?

您已将服务器设置为通过HTTPS与任何客户端进行通信。 如果您希望限制与具有特定证书的客户进行通信,您需要在服务器代码中进行额外的检查。

Nate Good写了一个教程,可能会指出你正确的道路。 这里有一个片段给你一个想法的想法:

 https.createServer(options, function (req, res) { if (req.client.authorized) { res.writeHead(200, {"Content-Type": "application/json"}); res.end('{"status":"approved"}'); } else { res.writeHead(401, {"Content-Type": "application/json"}); res.end('{"status":"denied"}'); } }).listen(443);