2014-09-11 71 views
1

如果连接是由浏览器完成的,socket.io(在服务器上)是否可以从客户端读取SSL证书? 我有一个html页面来启动一个长时间轮询节点服务器。 当来自客户端的requet涉及到一个节点的应用程序,Node.js的是能与此代码读取客户端证书:socket.io如何读取客户端证书

request.connection.getPeerCertificate() 

然而,我试着用插座,而不是longpolling。

在上节点应用的插座功能我有这样的:

io.sockets.on('connection', function (socket) { 

然而,这个功能里面,我不能使用

request.connection.getPeerCertificate() 

,因为没有任何“请求”对象在这里。接下来是来自cient的套接字。我已经在控制台输出插座的所有内容,但我不能看到对应

request.connection.getPeerCertificate() 

任何领域有没有办法来“强迫”客户端上的插座还包括证书/密钥连接时到服务器?

我发现了一些关于这个问题的资源。例如here

大多数评论似乎告诉socket.io不能读取连接客户端上的证书。 第一篇文章看起来像一个工作。但我真的不明白如何实现这一点。 Tjhere在socket.io源代码中没有“io.Manager”。 如果我输出“io.Manager”到控制台然后我得到一个“未定义”

+0

您可以尝试使用'https'强制进行认证检查。或者,您可以在连接'var socket = io.connect('https:// localhost',{secure:true})时使用'secure'选项;'这会强制客户端认证检查 – Ravi 2014-09-11 12:09:53

+0

我已经在使用https。我还添加了secure:true标志。但它没有帮助。 – user3726562 2014-09-11 13:11:14

回答

0

socket.client.request.client.getPeerCertificate()看来,如果你设置HTTPS代理的rejectUnauthorized选项设置为false,让你的证书(我知道!)
还,您可以从这里查看authorized属性,查看客户是否根据给定的CA进行授权。