2014-09-11 146 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進行授權。