Error: unable to verify the first certificate 的問題

Error: unable to verify the first certificate

    at TLSSocket.onConnectSecure (node:_tls_wrap:1659:34)

    at TLSSocket.emit (node:events:514:28)

    at TLSSocket.emit (node:domain:488:12)

    at TLSSocket._finishInit (node:_tls_wrap:1070:8)


這個錯誤通常發生在Node.js應用程式嘗試建立一個安全的TLS/SSL連線時,但是無法驗證伺服器提供的SSL憑證鏈。 這可能是因為伺服器的SSL憑證不被客戶端信任,或是中間憑證沒有正確安裝在伺服器上。

解決這個問題有幾個方法:

1. 使用正確的CA證書

確保伺服器使用的SSL憑證是由受信任的憑證授權單位(CA)簽發的,並且所有中間憑證都已正確安裝。 你可以使用SSL檢查工具(如SSL Labs的SSL Server Test)來驗證伺服器的憑證設定。

2. 在Node.js中忽略憑證驗證(不建議)

作為臨時解決方案,你可以透過設定環境變數來讓Node.js忽略TLS/SSL憑證驗證。 但請注意,這種方法會降低安全性,因此不建議在生產環境中使用。


NODE_TLS_REJECT_UNAUTHORIZED=0 node yourScript.js

或在你的Node.js程式碼中直接設定:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

3. 使用自訂CA證書

如果你正在連接到的伺服器使用的是自簽名證書或是私有CA簽發的證書,你可以透過將CA證書加入你的請求中來解決這個問題。 例如,使用https模組發起請求時:

const https = require('https');

const fs = require('fs');


const options = {

  hostname: 'example.com',

  port: 443,

  path: '/',

  method: 'GET',

  ca: fs.readFileSync('/path/to/ca-cert.pem')

};


const req = https.request(options, (res) => {

  console.log('狀態碼:', res.statusCode);

  res.on('data', (d) => {

    process.stdout.write(d);

  });

});


req.on('error', (e) => {

  console.error(e);

});

req.end();

在這個例子中,ca選項用於指定一個或多個CA證書,這些證書將用於驗證伺服器證書的簽章。

4. 更新Node.js和npm

確保你的Node.js和npm版本是最新的,因為舊版可能不支援最新的加密演算法或憑證格式。

5. 檢查系統信任的CA列表

確保你的作業系統信任的CA清單是最新的,因為Node.js通常會使用系統的CA清單來驗證憑證。

採取適當的方法解決這個問題,確保你的應用程式能夠安全地與伺服器通訊。



文章轉載或引用,請先告知並保留原文出處與連結

原文連結:
https://code.aidec.tw/post/Error:-unable-to-verify-the-first-certificate