我从授权服务器获得CA
。我已按照以下方式设置HTTPS
和WebSocket
设置:
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)如果这是可能的话?
答案 0 :(得分:0)
如果您正在谈论浏览器,则必须在浏览器或操作系统证书存储区中安装客户端证书和私钥(具体取决于使用的浏览器)。安装完成后,浏览器将自动发送证书。
不幸的是,客户端证书安装不是一个用户友好的过程。
如果您的客户是节点流程,则客户端证书选项为(finally)added in socket.io 1.3。
不要忘记验证所提供的证书是否与系统中的用户帐户匹配。 rejectUnauthorized
仅验证客户端是否提供了由任何受信任的CA颁发的 证书。
您的意思是您的服务器拥有SSL证书吗?您无法使用该证书签署新证书。没有受信任的根CA提供的证书允许第三方签署证书而无需很长的流程和大量资金。
您可以运行自己的CA来签署客户端证书。您必须将服务器配置为信任您的客户端证书颁发CA(通过ca
中的createServer
选项),因为默认情况下它不受信任。