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.key
, client.crt
和client.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);