Socket.IO TLS需要密钥/证书

时间:2015-08-06 18:48:58

标签: node.js sockets ssl socket.io

我从授权服务器获得CA。我已按照以下方式设置HTTPSWebSocket设置:

var httpsOptions = {
    cert: fs.readFileSync(config.ssl.server_cert),
    key: fs.readFileSync(config.ssl.server_key),
    requestCert: true,
    rejectUnauthorized: true,
    passphrase: config.ssl.server_password
};

httpsServer.listen(config.https_port, function () {
    console.info("HTTPS server running on %d", config.https_port);
});

io = io.listen(server);
io.sockets.on('connection', function (socket) {
    console.log("connected: " + socket.id);
})

现在,我的客户必须注册一个帐户。当他们这样做时,我想为他们创建一个私钥/公钥,并用我拥有的CA签名。然后,他们必须将它们用于任何Web套接字连接。如果没有提供,我甚至不想允许连接。

我的客户当时是:

io.connect(url, {secure: true, 'force new connection': true});

但是我无法弄清楚如何将密钥传递给服务器,以及B)如果这是可能的话?

1 个答案:

答案 0 :(得分:0)

  • 如果您正在谈论浏览器,则必须在浏览器或操作系统证书存储区中安装客户端证书和私钥(具体取决于使用的浏览器)。安装完成后,浏览器将自动发送证书。

    不幸的是,客户端证书安装不是一个用户友好的过程。

  • 如果您的客户是节点流程,则客户端证书选项为(finallyadded in socket.io 1.3

不要忘记验证所提供的证书是否与系统中的用户帐户匹配。 rejectUnauthorized仅验证客户端是否提供了由任何受信任的CA颁发的 证书。

您的意思是您的服务器拥有SSL证书吗?您无法使用该证书签署新证书。没有受信任的根CA提供的证书允许第三方签署证书而无需很长的流程和大量资金。

您可以运行自己的CA来签署客户端证书。您必须将服务器配置为信任您的客户端证书颁发CA(通过ca中的createServer选项),因为默认情况下它不受信任。