2014-01-10 67 views
0

我的本地Windows 7計算機上運行了一個節點服務器(v0.10.20),該服務器使用我的客戶端證書向後端發出https請求。該請求在開始工作,從一天到另一它停止與錯誤信息的工作:來自節點服務器的https請求使用客戶端證書報告已過期證書

[Error: 8432:error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate 
expired:openssl\ssl\s3_pkt.c:1256:SSL alert number 45] 

我沒有改變任何編碼和證書過期日期是在2015年十月此外,HTTPS請求仍然有效如果我從瀏覽器中啓動它而不是讓nodejs執行它。有誰知道這可能是什麼原因?

相關的nodejs編碼看起來像這樣,即使我不認爲這個問題與編碼有關。正如我所說的,它沒有改變編碼就停止了工作。

HTTPS請求

function callBackend(hostname, port, path, method, callback){ 
    var options = { 
     hostname: hostname, 
     port: port, 
     path: path, 
     method: method, 
     pfx: SSOCertificate, 
     passphrase: SSOCertificatePassphrase, 
     rejectUnauthorized: false, 
     strictSSL: false, 
    }; 

    var data = "";  
    var req = https.request(options, function(res) { 
     res.on('data', function(chunk) { data += chunk; }); 
     res.on('end', function(){ callback(data); }); 
    }); 

    req.end(); 
    req.on('error', function(e) { 
     console.error(e); 
    }); 
} 

證書檢索。我已經手動執行了這些步驟,並將路徑硬編碼到最終的pfx文件。錯誤保持不變

if(process.platform == "win32") { 
    exec("certutil -store -user -v my", function (error, stdout, stderr) { 
     var serialNumber = getSSOCertSerialNumber(error, stdout, stderr); 
     var SSOCertificatePath = path.join(__dirname, '/SSOCert.pfx'); 

     exec("certutil -f -user -p " + SSOCertificatePassphrase + " -exportPFX " + serialNumber + " \"" + SSOCertificatePath + "\"", function (error, stdout, stderr) { 
      var SSOCertificate = fs.readFileSync(SSOCertificatePath); 
      var deleteCommand = 'del "' + SSOCertificatePath + '"'; 
      callback(SSOCertificatePassphrase, SSOCertificate); 
     }); 
    }); 
} 

回答

0

很明顯,我在執行這些步驟手冊時犯了一個錯誤。再加上certutil也會返回「存檔」證書(我無法通過Windows UI看到)以及處理certutil返回的「Not After:」屬性中的錯誤,這導致了我們提取了錯誤證書的問題。錯誤的證書確實在一天前到期。

因此,nodejs或證書本身沒有問題,我只是用certutil提取錯誤的證書。