Blogg
Förstå och åtgärda felet: ”error:0308010cenvelope routines::unsupported” i Node.js
Felet ”error:0308010cenvelope routines::unsupported” har blivit ett vanligt problem i samband med användning av Node.js, särskilt när du arbetar med krypteringsfunktioner eller SSL/TLS-anslutningar. Felet uppstår vanligtvis på system där OpenSSL-versionen inte är kompatibel med den version av Node.js som används. Denna artikel går igenom vad felet innebär, vanliga orsaker, och hur du kan åtgärda problemet.
Vad betyder felet?
Felet ”error:0308010cenvelope routines::unsupported” indikerar att Node.js försöker använda en algoritm som inte stöds av den version av OpenSSL som är installerad på ditt system. Detta kan hända i samband med att Node.js använder SSL/TLS för att skapa en säker anslutning, eller när det försöker använda en krypteringstjänst som använder OpenSSL.
Den specifika delen ”digital envelope routines” hänvisar till krypteringsoperationer som är en del av OpenSSLbibliotek, och ”unsupported” betyder att den begärda metoden inte stöds i den aktuella konfigurationen av OpenSSL.
Orsaker till felet
- Node.js version 17 och senare
- Felet är vanligast i Node.js 17 och senare versioner, där det infördes ändringar i hur OpenSSL hanterar vissa algoritmer. Dessa förändringar gör att äldre krypteringsmetoder eller algoritmer inte längre stöds som standard.
- Detta inträffar särskilt när Node.js försöker skapa krypterade anslutningar eller hantera krypterade data på ett sätt som inte längre är kompatibelt med den version av OpenSSL som är installerad på ditt system.
- Inkompatibel OpenSSL-version
- En annan vanlig orsak till detta fel är att din version av OpenSSL inte stödjer den typ av kryptering som Node.js försöker använda. Om du har en äldre version av OpenSSL kan vissa krypteringsmetoder vara inaktiverade eller inte tillgängliga alls.
- Funktioner som används av bibliotek
- Om du använder tredjepartsbibliotek som gör användning av SSL/TLS eller kryptografiska funktioner, kan dessa bibliotek också vara beroende av föråldrade krypteringsmetoder som inte längre stöds.
Lösningar på felet
Här är några möjliga lösningar för att åtgärda felet ”error:0308010cenvelope routines::unsupported”:
1. Sätt miljövariabeln NODE_OPTIONS
- En snabb lösning är att sätta en miljövariabel som tvingar Node.js att använda den äldre OpenSSL-metoden som stöder de algoritmer som orsakar felet.
- Detta görs genom att sätta
NODE_OPTIONStill--openssl-legacy-provider. - Så här gör du:
- På Linux/macOS:bashKopiera kod
export NODE_OPTIONS=--openssl-legacy-provider - På Windows (i Command Prompt):bashKopiera kod
set NODE_OPTIONS=--openssl-legacy-provider - Detta kan också läggas till i din terminals startfil (t.ex.
.bashrceller.zshrcpå Linux/macOS) för att automatiskt sättas vid varje terminalstart.
- På Linux/macOS:bashKopiera kod
2. Uppdatera Node.js
- Om du kör en äldre version av Node.js kan du överväga att uppgradera till en nyare version som hanterar OpenSSL på ett mer kompatibelt sätt. Node.js släppte vissa fixar för att hantera dessa kompatibilitetsproblem i senare uppdateringar.
- Så här uppdaterar du Node.js:
- Om du använder Node Version Manager (NVM):bashKopiera kod
nvm install node # Detta installerar den senaste stabila versionen. nvm use node # Välj den senaste versionen. - Om du inte använder NVM kan du ladda ner den senaste versionen av Node.js från Node.js officiella webbplats och installera den manuellt.
- Om du använder Node Version Manager (NVM):bashKopiera kod
3. Installera eller uppdatera OpenSSL
- En annan lösning är att se till att du har den senaste versionen av OpenSSL installerad på ditt system. För äldre versioner av Node.js kan vissa versioner av OpenSSL krävas.
- Så här uppdaterar du OpenSSL på macOS:
- Använd Homebrew för att installera den senaste versionen:bashKopiera kod
brew install openssl
- Använd Homebrew för att installera den senaste versionen:bashKopiera kod
- Så här uppdaterar du OpenSSL på Linux (Ubuntu/Debian):bashKopiera kod
sudo apt-get update sudo apt-get install openssl
4. Använd en tidigare version av Node.js
- Om felet började inträffa efter en uppgradering till Node.js 17 eller senare kan du överväga att nedgradera till en tidigare version av Node.js, t.ex. version 16 eller 14, som inte lider av samma kompatibilitetsproblem med OpenSSL.
- Så här gör du om du använder NVM:bashKopiera kod
nvm install 16 # Installera Node.js 16 nvm use 16 # Byt till version 16
5. Rensa cache och installera om beroenden
- Om du använder npm eller Yarn för att hantera beroenden i ditt projekt kan det vara en bra idé att rensa npmcache och installera om alla beroenden.
- Så här gör du:
- Rensa npmcache:bashKopiera kod
npm cache clean --force - Ta bort
node_modulesochpackage-lock.json:bashKopiera kodrm -rf node_modules package-lock.json - Installera om beroenden:bashKopiera kod
npm install
- Rensa npmcache:bashKopiera kod
Slutsats
Felet ”error:0308010cenvelope routines::unsupported” orsakas oftast av inkompatibiliteter mellan Node.js och OpenSSL. Lösningen innebär att uppdatera eller konfigurera om Node.js och OpenSSL, använda rätt miljövariabler eller nedgradera till en stabil version av Node.js. Genom att följa dessa steg kan du snabbt åtgärda felet och fortsätta arbeta med dina applikationer utan problem.