#️⃣

node.js >= v17のerror:0308010C:digital envelope routines問題をライブラリ更新で対処する

2023/05/16に公開

node.jsを現LTSのv18に上げるにあたり、v17で入ったOpenSSLによる変更で0308010C:digital envelope routinesエラーが出ることがあります。可能な限りライブラリのアップデートで対応できるようにする方法をまとめます。

背景

node.jsについて、直近LTSで2年近く使えるのはv18です。一方で、node.js >= v17において、各種ライブラリで使われるOpenSSLのバージョンが3系に更新されました。これにより、webpackなどのライブラリにおいてハッシュ関数を呼び出している場合に表題のエラーに遭遇することがあります。

エラー自体は--openssl-legacy-providerオプションをつけてnode.jsを動かすか、v16系を使うworkaroundで解消されます。しかしながら、前者はセキュリティ上の懸念があり、後者は2023/9/11頃にサポート終了になります。そのため、これらworkaroundを使わずに問題を解消したいです。そこで、開発環境に応じてどのライブラリが問題になっているか調査・対処できるようにまとめました。

主な原因

Webpack-v4系を使っている場合に発生します。そのため、package-lock.jsonを見たときにpeerDependencyでwebpack < 5を指定しているライブラリを探してアップデートすると解消できます。後述のフレームワーク等を使っている場合、フレームワーク側の修正が利用できます。

Case.1: Next.jsプロジェクトの場合

Next.js v12.0.0でmd4の代わりにxxhash64を使うwebpackの設定に修正済みです。もしこれより古いバージョンであればアップデートしましょう。[1]

Case.2: Create-React-Appで作ったReactプロジェクト

react-scripts v5.0でWebpack 5系を使うようアップデートされました。もしこれより古いバージョンであればアップデートしましょう。[2]

Case.3: NuxtJSプロジェクト(v2系)の場合

v2.16.2でwebpack 5系を使うようアップデートされました。もしこれより古いバージョンであればアップデートしましょう。[3]

Case.4: storybookを使っている場合

webpackのv5系をbuilderとして初期化しておくと解消できます。[4]

$ npx sb init --builder webpack5

脚注
  1. https://github.com/vercel/next.js/pull/30095 ↩︎

  2. https://github.com/facebook/create-react-app/issues/11708#issuecomment-986309926 ↩︎

  3. https://github.com/nuxt/nuxt/releases/tag/v2.16.2 ↩︎

  4. https://github.com/storybookjs/storybook/issues/16555#issuecomment-1426888852 ↩︎

Discussion