TIL_error:0308010c:digital envelope routines::unsupported

Eugenius1st·2023년 7월 18일
5

error

목록 보기
3/15

배포시 갑자기 나타난 오류..

OpenSSL 3.0이 포함된 Node.js V17+는 MD4 알고리즘을 OpenSSL 3.0의 레거시 공급자로 옮겼습니다. 공급자는 필요할 때 응용 프로그램에 추가할 수 있는 알고리즘 모음입니다. 레거시 공급자에는 보안 측면에서 안전하지 않고 오래된 알고리즘이 포함되어 있습니다. 레거시 공급자는 기본적으로 로드되지 않습니다.

오류를 해결하는 몇 가지 다른 방법이 있습니다. 하나씩 논의해 봅시다.

해결방법1

NODE_OPTIONS 환경 변수를 --openssl-legacy-provider로 설정합니다.
NODE_OPTIONS 환경 변수를 --openssl-legacy-provider 로 설정하려면 터미널을 열고 아래 명령을 실행하십시오.

# for macOS, Linux or Windows Git Bash
export NODE_OPTIONS=--openssl-legacy-provider

# for Windows CMD (Command Prompt)
set NODE_OPTIONS=--openssl-legacy-provider

# for Windows PowerShell
$env:NODE_OPTIONS="--openssl-legacy-provider"

# for Docker (in your Dockerfile)
ENV NODE_OPTIONS="--openssl-legacy-provider"

안된다면 환경변수 해제

# 👇️ for macOS, Linux or Windows Git Bash
unset NODE_OPTIONS

# -----------------------------------------

# 👇️ for Windows CMD (Command Prompt)
set NODE_OPTIONS=

# -----------------------------------------

# 👇️ for Windows PowerShell
[Environment]::SetEnvironmentVariable('NODE_OPTIONS', '', 'User')
[Environment]::SetEnvironmentVariable('NODE_OPTIONS', '', 'Machine')

해결방법2

--openssl-legacy-provider 플래그를 Webpack에 전달합니다.
위의 해결 방법이 작동하지 않으면 --openssl-legacy-provider 플래그를 Webpack에 전달해 볼 수 있습니다. React 앱에서 --openssl-legacy-provider를 다음과 같이 시작 스크립트에 전달할 수 있습니다.

{
  "scripts": {
    "start": "react-scripts start --openssl-legacy-provider",
  }
}

다시 이것은 실패하고 오류가 지속되면 다음 솔루션 방법으로 이동하십시오.


해결방법3

Create React App 애플리케이션의 경우 react-scripts를 v5.0.0 이상으로 업그레이드하십시오.

package.json 파일에서 애플리케이션에 설치된 반응 스크립트 버전을 확인하십시오. 버전이 v5.0.0 미만인 경우 react-scripts 버전을 v5.0.0 이상으로 업그레이드하십시오.

V5.0.0으로 마이그레이션하려면 아래 명령을 실행하십시오.

# For npm
npm install --save --save-exact react-scripts@5.0.0
# For yarn
yarn add --exact react-scripts@5.0.0

업그레이드 후 오류가 발생하면 종속 항목을 다시 설치해야 할 수 있습니다. 이를 위해 node_modules 폴더와 package-lock.json을 삭제하십시오. 그런 다음 아래 명령을 사용하여 npm 캐시를 정리하십시오.

npm cache clean --force

그런 다음 npm install(또는 yarn)을 실행하여 종속성을 다시 설치합니다.

npm install

해결방법4

설치된 node.js 버전을 16 이하로 다운그레이드
이 오류에 대한 또 다른 해결책은 설치된 node.js 버전을 16 이하로 다운그레이드하는 것입니다. 다음 명령을 실행하여 현재 설치된 node.js 버전을 확인할 수 있습니다.

node -v

nvm을 통해 Node.js를 실행하는 경우 아래 명령을 실행하여 쉽게 node.js 버전을 다운그레이드할 수 있습니다.

nvm install v16

결론

error:0308010C:digital envelope routines::unsupported를 해결하려면 Node.js 버전 17+의 레거시 공급자를 활성화하고 OpenSSL v3.0을 사용해야 합니다 . 이를 위해 NODE_OPTIONS 환경 변수를 --openssl-legacy-provider로 설정하거나 --openssl-legacy-provider 플래그를 webpack에 전달합니다. 다른 솔루션은 반응 스크립트를 5보다 큰 버전으로 업그레이드하거나 설치된 node.js 버전을 16 이하로 다운그레이드하는 것입니다.

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

가치 있는 정보 공유해주셔서 감사합니다.

답글 달기
comment-user-thumbnail
2024년 3월 9일

안녕하세요
여러 해결 방법을 공유해주셔서 감사합니다!

저는 노드 16버전으로 프로젝트 진행하다가, 20버전으로 업데이트 한 이후에 이런 오류가 발생해서 '노드 버전 때문인가보다..' 생각하면서 방문했다가 놀랬어요!

저는 이런 낯선 오류들이 발생했을 때, 해결하기 급급해서 정확한 오류의 원인을 모르고 구글링해서 해결만하고 넘어갔는데요.

"OpenSSL 3.0이 포함된 Node.js V17+는 MD4 알고리즘을 OpenSSL 3.0의 레거시 공급자로 옮겼습니다. 공급자는 필요할 때 응용 프로그램에 추가할 수 있는 알고리즘 모음입니다. 레거시 공급자에는 보안 측면에서 안전하지 않고 오래된 알고리즘이 포함되어 있습니다. 레거시 공급자는 기본적으로 로드되지 않습니다."

이런 내용들.. 을 어떻게 알 수 있는지(?) 궁금합니다..

초보지만 잘해지고 싶어요 @.@

답글 달기