2013-11-24 57 views
0

我想與nodejs一起發送一些數據到其他服務器。 Nodejs通過https與其他服務器通信,nodejs使用可用的根證書驗證其他服務器的證書。要求是nodejs必須拒絕未授權的。nodejs錯誤與unable_to_verify_leaf_signature爲某些證書

我正在用一些測試服務器測試上述設置。對於一臺測試服務器,我創建了一個服務器證書,並使用openSSL通過自簽名CA證書「CA1.cer」進行簽名。對於其他測試服務器,我遵循與第一個測試服務器相同的步驟,但使用makecert實用程序。

現在我已經在我的nodejs代碼中包含了CA證書。問題是nodejs對於具有使用makecert實用程序創建的證書的測試服務器失敗。但是相同的代碼適用於具有使用openSSL創建的證書的測試服務器。

另外兩個服務器的推移,沒有任何證書錯誤的瀏覽器很好..

我的NodeJS選項下面,我對版本v0.8.18:

var options = { 
    host: host, 
    port: port, 
    path: pathname, 
    method: 'POST', 
    ca: [ fs.readFileSync('./ca1.cer'), //created using OpenSSL 
      fs.readFileSync('./ca2.cer') ], // created using makecert util 
    agent: false, 
    requestCert: true, 
    rejectUnauthorized: true, 
    auth: cred, 
    headers: { 
     'Content-Type': 'text/xml', 
     'Content-Length': xmldata.length 
    } 
}; 

請幫助....

回答

0

問題已解決。從makecert util創建的證書不是.pem格式。一旦轉換到.pem上面的代碼正在工作。感謝Andrei的支持。

0

要允許進行請求無效的SSL證書的服務器,添加到選項:

"rejectUnauthorized": false 
+0

嗨證書是有效的,因爲它與瀏覽器一起工作。尋找爲什麼只有在使用nodejs時證書失敗的原因。 –

+0

導致您遇到錯誤的SSL證書問題的內部描述如下:http://blog.gaeremynck.com/fixing-unable_to_verify_leaf_signature/ –

+0

感謝您的評論。但在我的情況下,這兩個證書都是以類似的方式創建的,我不認爲有任何中間CA參與。而且,使用OpenSSL創建的證書工作正常。我可以在服務器證書中看到的唯一區別是,OpenSSL證書是(版本:V1,簽名算法:sha1RSA,序列號:01,公鑰:2048位,沒有「授權密鑰標識符」字段)。 Makecert證書是(版本:V3,簽名算法:md5RSA,序列號:<十六進制值>,公鑰:1024位,並且有「授權密鑰標識符」字段) –