解決 Node.js ERR_OSSL_EVP_UNSUPPORTED 問題的方法

在使用 npm run 時,有時候可能會遇到 ERR_OSSL_EVP_UNSUPPORTED 錯誤。這通常是由於 Node.js 17 版本中新發布的 OpenSSL3.0 對演算法與金鑰進行了一些限制所導致的。該問題的根源可以追溯到 Node.js 17.0.0 版本的發布,其中對 OpenSSL3.0 的更新引入了相容性問題。

Node.js 17.0.0 Release Notes 中提到:

“The OpenSSL library has been updated to 3.0.0. This introduces a number of changes and new features, but it also means that some old cryptographic algorithms and keys may no longer be supported. Applications relying on older, insecure cryptographic practices may need to be updated.”

簡而言之,Node.js 17.0.0 版本引入了 OpenSSL3.0 的更新,這些更新帶來了一些變化和新功能,但也導致了一些舊的加密演算法和金鑰不再受支援。這可能會導致 ERR_OSSL_EVP_UNSUPPORTED 錯誤。

以下提供一些解決方法,以及相關的說明。

方法一:升級 Node.js 版本

確保你的 Node.js 版本是最新的,這可以解決 OpenSSL3.0 對演算法與金鑰的限制問題。

# 使用 nvm 安裝最新版本
nvm install node
# 切換到最新版本
nvm use node

原因: ERR_OSSL_EVP_UNSUPPORTED 錯誤通常是由於 Node.js 17 版本中新發布的 OpenSSL3.0 對演算法與金鑰進行了一些限制所導致。

方法二:升級 React.js 版本

如果你的專案是基於 React.js,考慮升級 React.js 版本。新版本可能已經針對 Node.js 17 的 OpenSSL3.0 進行了相應的修復。

# 更新 React.js 至最新版本
npm install react@latest

原因: 特定版本的 React.js 可能與 Node.js 17 有相容性問題,升級 React.js 可以解決這些問題。

方法三:升級 Vue.js 版本

如果你的專案是基於 Vue.js,考慮升級 Vue.js 版本。新版本可能已經針對 Node.js 17 的 OpenSSL3.0 進行了相應的修復。

# 更新 Vue.js 至最新版本
npm install vue@latest

原因: 特定版本的 Vue.js 可能與 Node.js 17 有相容性問題,升級 Vue.js 可以解決這些問題。

方法四:臨時解決辦法 – 使用 NODE_OPTIONS 設定

如果不想升級 Node.js 或相關框架,可以使用 NODE_OPTIONS 環境變數設定,降低 OpenSSL 版本。這是一種臨時的解決辦法。

Linux

export NODE_OPTIONS=--openssl-legacy-provider

Windows

set NODE_OPTIONS=--openssl-legacy-provider

原因: 這是因為 NODE_OPTIONS=--openssl-legacy-provider 參數可以使 Node.js 使用較舊的 OpenSSL 版本,暫時繞過相容性問題。

這樣,當使用者執行 npm start 時,將自動使用 --openssl-legacy-provider 參數來啟動應用程序,解決 ERR_OSSL_EVP_UNSUPPORTED 錯誤。

請注意,使用 NODE_OPTIONS=--openssl-legacy-provider 是臨時性的解決方案,建議最終還是升級相關的軟體版本,以確保與最新版本的 Node.js 相容。