# error:0308010C:digital envelope routines::unsupportedの対処法

2024-02-12 16:50:00

Node.jsを更新した後、Expressアプリをローカルで起動すると「0308010C」のエラーで止まった。 package.jsonのscriptsで NODE_OPTIONS=--openssl-legacy-provider を指定すると回避できた。

# Node.jsの更新後に起動するとエラーが出た

Expressアプリをローカルで起動しようとすると、次のエラーメッセージが表示された。

Error: error:0308010C:digital envelope routines::unsupported

# Node.js v17以降でOpenSSL 3.0に変わったことが原因

このエラーは、Node.jsのバージョンをv17.0.0以降に上げたことが原因で発生した。 Node.js v17.0.0以降では、OpenSSLが「OpenSSL 1.1.1」から「OpenSSL 3.0」に変わった。 プロジェクトで使っているライブラリの一部が、この変更に対応していなかった。

# 旧式のOpenSSLプロバイダを使うようNode.jsに指示した

対処として、Node.jsに旧式のOpenSSLプロバイダを使わせた。 package.jsonの serve と build の先頭で、NODE_OPTIONS を設定している。

"serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",

参照した資料は次のとおりである。