LoginSignup
7
2

More than 1 year has passed since last update.

ERR_OSSL_EVP_UNSUPPORTEDの解決方法

Posted at

Node.jsのバージョン17以降から、OpenSSL3.0に対応するようになったため、既存のエコシステムに影響が生じるようになったようだ。それが原因で、Reactアプリを立ち上げるときに、ERR_OSSL_EVP_UNSUPPORTEDというエラーに遭遇した。

今回、このエラーを解決することができたので、手順と周辺情報を共有したい。

同様のエラーに遭遇した方のお役に立てれば、幸いである。

エラー解決手順

https://images.unsplash.com/photo-1600880292203-757bb62b4baf?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

まず解決手順を簡潔に記そう。

  1. NVMをインストール
  2. NVMでNode.jsのバージョン16をインストール。(バージョン17はインストール済み)
  3. NVMを使って、Node.js バージョン17 → 16へ切り替え

以上である。

では次に、ERR_OSSL_EVP_UNSUPPORTED というエラーが出現した経緯について説明する。

ERR_OSSL_EVP_UNSUPPORTEDに遭遇した経緯


Create React Appにある次のコードを実行した:

npx create-react-app my-app
cd my-app
npm start

npm start 後、ブラウザが立ち上がったものの、次の画面が現れた:

Untitled.png


エラー遭遇後、ERR_OSSL_EVP_UNSUPPORTED についてググってみた。

すると「How To Fix ERR_OSSL_EVP_UNSUPPORTED In React JS Application」という記事にたどり着き、次のエラー解決策が示されていた。

Untitled 1.png

ここで示されている、Package.json を変更する方法でも解決するのかもしれない。しかし、本質的に理解できなかったので、もう少し調べてみた。すると、Node.js のGithubページ に次の記載があった。

OpenSSL 3.0

Node.js now includes OpenSSL 3.0, specifically quictls/openssl which provides QUIC support. With OpenSSL 3.0 FIPS support is again available using the new FIPS module. For details about how to build Node.js with FIPS support please see BUILDING.md.

While OpenSSL 3.0 APIs should be mostly compatible with those provided by OpenSSL 1.1.1, we do anticipate some ecosystem impact due to tightened restrictions on the allowed algorithms and key sizes.

If you hit an ERR_OSSL_EVP_UNSUPPORTED error in your application with Node.js 17, it’s likely that your application or a module you’re using is attempting to use an algorithm or key size which is no longer allowed by default with OpenSSL 3.0. A command-line option, --openssl-legacy-provider, has been added to revert to the legacy provider as a temporary workaround for these tightened restrictions.

For details about all the features in OpenSSL 3.0 please see the OpenSSL 3.0 release blog.

ポイントは、

  • Node.js 17を使うと場合によっては、ERR_OSSL_EVP_UNSUPPORTEDが現れる。
  • オプションで--openssl-legacy-provider を使うと回避できる

ということ。

ただ、明確にNode.js 17を使う目的はなかったので、Node.js 16に落とすことで解決しようと考えた。

Node.js 17から16へ切り替えるためには、NVMというパッケージが必要になる。

NVM

Frame 1 (3).png

NVMとは「Node Version Maneger」のことであり、Node.jsのバージョンを簡単に切り替えるためのツールである。NPMやNPXとちがって、Node.jsインストールしたとき同時にインストールされない。追加でインストールする必要がある。

詳細については、NVMのGithubページをみてほしい。

それでは、NVMのインストール方法を見ていこう

NVMのインストールとバージョン切り替え方法

https://images.unsplash.com/photo-1623707430101-9e74cefe05e2?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

NVMのGithubのReadmeを見ると、インストール方法は2種類ある。

今回は私が行ったインストール方法を紹介する。と言っても、次のコマンドを実行するだけだ。


NVMをインストールする:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

これで、NVMのインストールは完了である。

つぎに、NVM経由でNode.jsをインストールする。


NVMでNode.js(最新)をインストールする:

nvm install node # 最新バージョンのNodeをインストール

NVMでNode.jsをバージョン指定してインストールする:

nvm install 16.13.0 # or 16.3.0, 12.22.1, etc

これで、あなたのPCには複数のNode.jsがインストールされ、任意に切り替え可能となった。どのバージョンが現在インストールされているか確認したい場合は、


インストール済みNode.jsバージョン確認する:

% nvm ls
       v16.13.0 # インストール済み
->      v17.1.0 # 現在使用中のNode.jsバージョン
         system
default -> node (-> v17.1.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.1.0) (default)
stable -> 17.1 (-> v17.1.0) (default)
lts/* -> lts/gallium (-> v16.13.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.7 (-> N/A)
lts/fermium -> v14.18.1 (-> N/A)
lts/gallium -> v16.13.0

では、次にバージョンの切り替えを行おう。


NVMでNode.jsバージョンを切り替える:

% nvm use 16.13.0 # 16.13.0 の部分は使いたいバージョンにする

バージョンが切り替わったか確認する:

% nvm ls
->     v16.13.0 # V17 だったが、V16 に切り替わった
        v17.1.0 
         system
default -> node (-> v17.1.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.1.0) (default)
stable -> 17.1 (-> v17.1.0) (default)![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552712/6e7e9bc9-4144-d3ad-5b03-f6d37ec2ce06.png)

lts/* -> lts/gallium (-> v16.13.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.7 (-> N/A)
lts/fermium -> v14.18.1 (-> N/A)
lts/gallium -> v16.13.0

これで、現在あなたのPCで使用しているNode.jsのバージョンが16へ変更となった。

それでは再びReact Appを立ち上げてみよう.

エラーが解決したか確認

https://images.unsplash.com/photo-1516321318423-f06f85e504b3?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

React App を立ち上げる:

npm start

ブラウザが起動して、次の画面が表示された:

Untitled 2.png

正常に起動した。やったー

まとめ

  • Node.js バージョン17以降、OpenSSL3.0に対応
  • OpenSSL3.0対応により、影響の出るパッケージあり
  • ERR_OSSL_EVP_UNSUPPORTED が遭遇した場合、Node.jsのバージョンを16へ変更してみる

以上である。Untitled.png

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2