簡體   English   中英

無法驗證第一個證書; NodeJs 與 Python 請求

[英]Unable to verify the first certificate; NodeJs vs Python Requests

我正在嘗試從 NodeJs 向 stackshare.io 發出 http 請求:

var https = require('https');
var options = {
   host: 'www.stackshare.io',
};

https.get(options, function (http_res) {
    var data = "";
    http_res.on("data", function (chunk) {
      data += chunk;
      console.log('data:', data)
    });

});

我得到:

Error: unable to verify the first certificate
    at TLSSocket.onConnectSecure (_tls_wrap.js:1055:34)
    at TLSSocket.emit (events.js:198:13)
    at TLSSocket._finishInit (_tls_wrap.js:633:8)

如果我將host更改為www.google.com ,它就可以工作。 這是否意味着 stackshare 處理其 SSL 證書的方式存在問題?

我發現了幾個類似(但略有不同)的問題,建議嘗試這個:

var rootCas = require('ssl-root-cas/latest').create();
require('https').globalAgent.options.ca = rootCas;

但我仍然遇到同樣的錯誤。

如果我使用python 請求,它可以工作:

import requests

print requests.get('https://stackshare.io').content

python 請求是否對 SSL 證書更寬容?

該站點設置不正確,未提供必要的中間證書來驗證信任鏈。 瀏覽器通常通過嘗試以某種方式獲取丟失的證書來解決此類問題,而大多數其他應用程序則沒有。 您可以通過查看SSLLabs 報告來看到此問題,其中明確指出“此服務器的證書鏈不完整。等級上限為 B。”

如果我使用 python 請求,它可以工作:...
python 請求是否對 SSL 證書更寬容?

對我不起作用,但會導致相同的錯誤:

requests.exceptions.SSLError: ...
u'[SSL: CERTIFICATE_VERIFY_FAILED] 證書驗證失敗...

可能是您使用了非常舊的 Python 版本,其中正確的證書驗證已關閉,或者您已經將缺少的中間證書導入到requests使用的信任庫中(這可能與 nodejs 使用的不同)。

暫無
暫無

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

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