node.js - Socket.IO TLS 需要 key /证书

标签 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 对其进行签名。然后他们必须将它们用于任何网络套接字连接。如果没有提供这些,我什至不想允许连接。

此时我的客户是:

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

但我不知道如何 A) 将 key 传递给服务器,以及 B) 如果这可能的话?

最佳答案

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

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

  • 如果您的客户端是 Node 进程,则客户端证书选项为 ( finally ) added in socket.io 1.3 .

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


您是说您的服务器有 SSL 证书吗?您不能用它签署新证书。没有受信任的根 CA 会发出允许第三方签署证书的证书,而无需很长的过程和大量资金。

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

关于node.js - Socket.IO TLS 需要 key /证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863602/

相关文章:

ios - 在 AFNetworking 2.0 中使用 SSL 时出现错误 1012

http - 使用 HTTPS 而不是 HTTP

javascript - 在前端显示数据

c# - 监听 8080 端口的 WebSocket Windows 服务

ruby-on-rails - Unicorn 可以直接处理 HTTPS 请求吗(请求不经过 Apache/Nginx)?

c - 在 C 中构建具有固定大小 header 的 UDP 数据报

python 无法理解通过 Winsock 发送的 C++ 字符串

javascript - 如何将新的 Nan::ObjectWrap 从 C++ 传递到 Javascript?

node.js - nodeJS 的每个包都会在 MeteorJS 上运行吗?

node.js - Mongoose 按查找字段分组