2012-10-10 112 views
0

所以我正在研究一個基本的節點應用程序。客戶端將通過SSL連接到它。當我只使用服務器證書時似乎工作正常,但是當我嘗試要求客戶端證書時,無論我將它扔到什麼地方,它都會繼續工作。node.js + restify - 需要客戶端證書

我在這個網站上發現了與此相關的問題,但其中包含的答案似乎並不適用於我。 Here's one.

下面是相關的代碼:

var restify=require('restify'); 
var fs=require('fs'); 

var server=restify.createServer({ 
    certificate: fs.readFileSync('../certs/server.crt'), 
    key: fs.readFileSync('../certs/server.key'), 
    ca: fs.readFileSync('../certs/ca.crt'), 
    requestCert: true, 
    rejectUnauthorized: true, 
}); 

... 

server.listen(8080, function() { 
    console.log('servers up...'); 
}); 

我使用curl來測試連接,幾乎任何進來導致登錄到控制檯請求對象。

我使用的各種curl命令行是:

curl -k https://localhost:8080/hello 
curl -k -E user.combined:password https://localhost:8080/hello 

我使用-k,因爲這些證書在本地生成和捲曲想要驗證它們。 (這可能是問題所在)

因此,無論我發送給節點實例,如果用戶使用正確的證書,我都會得到輸出結果(因爲它們位於第二個curl命令中上面一行)。

在控制檯登錄,我看到:

req = { socket: 
    { pair: 
     _secureEstablished: true, 
     _isServer: true, 
     ... 
     _rejectUnauthorized: false, 
     _requestCert: false, 

     (further down) 

     authorized: false 

顯然,有一些事情在這裏,我不是完全加快速度。會是什麼呢?

== == UPDATE

使用-v,捲曲打動了我一些額外的信息,包括在這嫋嫋輸出:

* About to connect() to localhost port 8080 (#0) 
* Trying 127.0.0.1... connected 
* successfully set certificate verify locations: 
* CAfile: none 
    CApath: /etc/ssl/certs 

如上所述,我ca.crt文件是在(相對)目錄../certs

謝謝。

回答

2

從1.4.4開始不支持這個功能。我相信這會包含在2.0版本中,因爲我看到代碼已經添加到Git存儲庫的主分支中。