簡體   English   中英

無法驗證第一個證書

[英]Unable to verify the first certificate

我有一個包含證書捆綁包,Python腳本和Node腳本的目錄。 這兩個腳本都向相同的URL發出GET請求,並且提供了相同的證書包。 Python腳本按預期發出請求,但是節點腳本拋出此錯誤:

{[錯誤:無法驗證第一個證書]代碼:'UNABLE_TO_VERIFY_LEAF_SIGNATURE'}

Python腳本(Python 3.4.3和請求庫)

import requests
print(requests.get(url, verify='/tmp/cert/cacert.pem'))

節點腳本(節點4.2.6和請求庫)

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

request.get({
    url: url,
    agentOptions: {
        ca: fs.readFileSync('/tmp/cert/cacert.pem')
    }
}, function (error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body);
    }
});

兩者都使用相同的OpenSSL版本:

$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.0.2e-fips 3 Dec 2015

$ node -pe process.versions.openssl 
1.0.2e

我認為證書捆綁包不存在問題,並且我不想在Node中關閉主機驗證。

有人知道為什么Node拋出此錯誤嗎?

文檔描述了ca選項,如下所示:

ca:PEM格式的信任證書的字符串,緩沖區或字符串數​​組或緩沖區。 如果省略此選項,將使用多個眾所周知的“根” CA,例如VeriSign。 這些用於授權連接。

因此,它不希望使用CA捆綁軟件。 修復很簡單,只需像這樣拆分捆綁包:

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

var certs = fs.readFileSync('/tmp/cert/cacert.pem').toString().split("\n\n"); 

request.get({
    url: url,
    agentOptions: {
        ca: certs
    }
}, function (error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body);
    }
});

也許您可以通過下載瀏覽器通常使用的證書來使用解決該問題的模塊。

https://www.npmjs.com/package/ssl-root-cas

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM