npm-installatiefout – kan certificaat van lokale uitgever niet ophalen

Ik krijg de foutmelding unable to get local issuer certificatebij het uitvoeren van een npm-installatie:

typings ERR! message Unable to read typings for "es6-shim". You should check the
 entry paths in "es6-shim.d.ts" are up to date
typings ERR! caused by Unable to connect to "https://raw.githubusercontent.com/D
efinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/es6-shim
/es6-shim.d.ts"
typings ERR! caused by unable to get local issuer certificate

Ik heb onlangs een update naar node 4 uitgevoerd vanuit een veel eerdere versie en het klinkt alsof node veel strenger is wanneer dit soort problemen zich voordoen.

Er is hiereen probleem besproken dat gaat over het gebruik van ca. bestanden, maar het gaat mijn begrip te boven en ik weet niet wat ik eraan moet doen.

Ik zit achter een bedrijfsfirewall, maar ik kan zonder enige beperking bij de url-boete komen in een browser.

Heeft iemand meer inzicht in dit probleem en welke mogelijke oplossingen er zijn?

Ik vraag me af om in de tussentijd terug te gaan naar knooppunt 0.12 🙁


Antwoord 1, autoriteit 100%

Typen kunnen worden geconfigureerd met het ~/.typingsrcconfiguratiebestand. (~betekent je thuismap)

Na het vinden van dit probleem op github: https://github.com/typings/typings/issues/120, ik heb dit probleem kunnen omzeilen door ~/.typingsrcte maken en deze configuratie in te stellen:

{
  "proxy": "http://<server>:<port>",
  "rejectUnauthorized": false
}

Het leek ook te werken zonder de proxy-instelling, dus misschien kon het dat ergens uit de omgeving oppikken.

Dit is geen echte oplossing, maar was genoeg voor typingsom de firewallproblemen van het bedrijf te negeren, zodat ik kon blijven werken. Ik weet zeker dat er een betere oplossing is.


Antwoord 2, autoriteit 95%

Probeer

npm config set strict-ssl false

Dit is een alternatief gedeeld in deze url https://github.com/nodejs/node/ problemen/3742


Antwoord 3, autoriteit 98%

Er is hier een probleem besproken dat gaat over het gebruik van ca-bestanden, maar het gaat mijn begrip te boven en ik weet niet wat ik eraan moet doen.

Dit is niet zo moeilijk als je eenmaal weet hoe! Voor Windows:

Ga met Chrome naar de root-URL waarover NPM klaagt (dus https://raw.githubusercontent.comin jouw geval).
Open dev tools en ga naar Security-> Bekijk certificaat. Controleer het certificeringspad en zorg ervoor dat uw certificaat op het hoogste niveau is, zo niet, open dat. Ga nu naar “Details” en exporteer het certificaat met “Kopieer naar bestand…”.

U moet dit converteren van DER naar PEM. Er zijn verschillende manieren om dit te doen, maar de gemakkelijkste manier die ik vond, was een online tool die gemakkelijk te vinden zou moeten zijn met relevante zoekwoorden.

Als je nu de sleutel opent met je favoriete teksteditor, zou je

. moeten zien

-----BEGIN CERTIFICATE----- 
yourkey
-----END CERTIFICATE-----

Dit is het formaat dat je nodig hebt. U kunt dit voor zoveel sleutels doen als u nodig heeft en ze allemaal in één bestand combineren. Ik moest in mijn geval github en de npm-registersleutels doen.

Bewerk nu gewoon uw .npmrc om naar het bestand te verwijzen dat uw sleutels bevat, zoals zo

cafile=C:\workspace\rootCerts.crt

Ik heb persoonlijk gemerkt dat dit aanzienlijk beter presteert achter onze zakelijke proxy in tegenstelling tot de strikte-ssl-optie. YMMV.


Antwoord 4, autoriteit 88%

Dit werkte voor mij:

export NODE_TLS_REJECT_UNAUTHORIZED=0

Raadpleeg de NodeJS-documentatie voor gebruik en waarschuwingen:
https://nodejs.org/api/cli.html#cli_node_tls_reject_unauthorized_value


Antwoord 5, autoriteit 75%

Iedereen krijgt deze foutmelding wanneer ‘npm install’ een pakket probeert op te halen van de HTTPS-server met een zelfondertekend of ongeldig certificaat.

Snelle en onveilige oplossing:

npm config set strict-ssl false

Waarom is deze oplossing onveilig?
De bovenstaande opdracht vertelt npm om verbinding te maken en de module van de server op te halen, zelfs als de server geen geldig certificaat heeft en de serveridentiteit niet is geverifieerd. Dus als er een proxyserver is tussen de npm-client en de daadwerkelijke server, biedt dit een man-in-middle-aanvalsmogelijkheid voor een indringer.

Veilige oplossing:

Als een module in uw package.json wordt gehost op een server met een zelfondertekend CA-certificaat, kan npm die server niet identificeren met beschikbare systeem-CA-certificaten.
U moet dus een CA-certificaat voor servervalidatie verstrekken met de expliciete configuratie in .npmrc.
In .npmrc moet u cafile opgeven, raadpleeg meer details over cafile-configuratie.

cafile=./ca-certs.pem

In het ca-certs-bestand kunt u een willekeurig aantal CA-certificaten (openbaar) toevoegen die u nodig hebt om servers te identificeren. Het certificaat moet de Base-64-gecodeerde X.509 (.CER)(PEM) -indeling hebben.

Bijvoorbeeld

# cat ca-certs.pem 
DigiCert Global Root CA
=======================
-----BEGIN CERTIFICATE-----
CAUw7C29C79Fv1C5qfPrmAE.....
-----END CERTIFICATE-----
VeriSign Class 3 Public Primary Certification Authority - G5
========================================
-----BEGIN CERTIFICATE-----
MIIE0zCCA7ugAwIBAgIQ......
-----END CERTIFICATE-----

Opmerking: als u eenmaal de cafile-configuratie in .npmrc heeft opgegeven, probeert npm alle servers te identificeren met behulp van CA-certificaten die alleen in cafile worden geleverd. Het zal dan geen systeem-CA-certificaatbundels controleren.
Hier is een bekende openbare CA-autoriteitcertificaatbundel.

Nog een andere situatie waarin u deze foutmelding krijgt:

Als je Git URL als een afhankelijkheid in package.json hebt genoemd en git staat op een ongeldig/zelfondertekend certificaat, dan geeft npm ook een soortgelijke fout.
Je kunt het oplossen met de volgende configuratie voor git client

git config --global http.sslVerify false 

Antwoord 6, autoriteit 69%

Gebruik het commando

npm config set strict-ssl false

Antwoord 7, autoriteit 31%

Als u een bedrijfscomputer gebruikt, heeft deze waarschijnlijk aangepaste certificaten (let op het meervoud daarop). Het duurde een tijdje om erachter te komen, maar ik heb dit kleine script gebruikt om alles te pakken en Node, NPM, Yarn, AWS en Git te configureren (blijkt dat de oplossing voor de meeste tools vergelijkbaar is). Vul dit in uw ~/.bashrcof ~/.zshrcof vergelijkbare locatie:

function setup-certs() {
  # place to put the combined certs
  local cert_path="$HOME/.certs/all.pem"
  local cert_dir=$(dirname "${cert_path}")
  [[ -d "${cert_dir}" ]] || mkdir -p "${cert_dir}"
  # grab all the certs
  security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > "${cert_path}"
  security find-certificate -a -p /Library/Keychains/System.keychain >> "${cert_path}"
  # configure env vars for commonly used tools
  export GIT_SSL_CAINFO="${cert_path}"
  export AWS_CA_BUNDLE="${cert_path}"
  export NODE_EXTRA_CA_CERTS="${cert_path}"
  # add the certs for npm and yarn
  # and since we have certs, strict-ssl can be true
  npm config set -g cafile "${cert_path}"
  npm config set -g strict-ssl true
  yarn config set cafile "${cert_path}" -g
  yarn config set strict-ssl true -g
}
setup-certs

U kunt dan op elk moment setup-certsuitvoeren in uw terminal. Houd er rekening mee dat als u Nvm gebruikt om Node-versies te beheren, u dit voor elke versie van Node moet uitvoeren. Ik heb gemerkt dat sommige bedrijfscertificaten om de zoveel tijd worden geroteerd. Gewoon opnieuw uitvoeren van setup-certslost dat allemaal op.

Je zult merken dat de meeste antwoorden suggereren om strict-sslin te stellen op false. Doe dat alsjeblieft niet. Gebruik in plaats daarvan de oplossing setup-certsom de daadwerkelijke certificaten te gebruiken.


Antwoord 8, autoriteit 12%

In het geval u yarngebruikt:

yarn config set strict-ssl false


Antwoord 9, autoriteit 12%

Mijn probleem was dat mijn bedrijfsproxy in de weg zat. De oplossing hier was om de root-CA / certificaatketen van onze proxy te identificeren, (op mac) deze vanuit de sleutelhanger in .pem-indeling te exporteren en vervolgens een variabele te exporteren die door het knooppunt kan worden gebruikt.

export NODE_EXTRA_CA_CERTS=/path/to/your/CA/cert.pem

Antwoord 10, autoriteit 6%

Nou, dit is geen goed antwoord, maar kan worden beschouwd als een snelle oplossing. Het juiste antwoord is Strict SSL uitschakelen.

Ik heb dezelfde fout

PhantomJS niet gevonden op PATH
https://github.com downloaden /Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-windows.zip
Opslaan in C:\Users\Sam\AppData\Local\Temp\phantomjs\phantomjs-2.1.1-windows.zip
Ontvangen…

Fout bij het maken van verzoek.
Fout: kan certificaat van lokale uitgever niet ophalen
bij TLSSocket. (_tls_wrap.js:1105:38)
op emitNone (events.js:106:13)
op TLSSocket.emit (events.js:208:7)
op TLSSocket._finishInit (_tls_wrap.js:639:8)
op TLSWrap.ssl.onhandshakedone (_tls_wrap.js:469:38)

Dus na het lezen van de fout.

Je hebt het bestand zojuist handmatig gedownload en op het gewenste pad geplaatst.
d.w.z.

C:\Users\Sam\AppData\Local\Temp\phantomjs\

Dit loste mijn probleem op.

   PhantomJS not found on PATH                                                                                                
Download already available at C:\Users\sam\AppData\Local\Temp\phantomjs\phantomjs-2.1.1-windows.zip                    
Verified checksum of previously downloaded file                                                                            
Extracting zip contents                                    

Antwoord 11, autoriteit 6%

Een disclaimer: deze oplossing is minder veilig, slechte gewoonte, doe dit niet.
Ik had een dubbele foutmelding: ik zit achter een zakelijke VPN/firewall. Ik heb dit probleem kunnen oplossen door een .typingsrc-bestand toe te voegen aan mijn gebruikersdirectory (C:\Users\MyUserName\.typingsrcin Windows). Natuurlijk, wanneer je SSL omzeilt, moet je naar je systeembeheerders keffen om het certificaatprobleem op te lossen.

Verander de register-URL van httpsin http, en zoals te zien in nfiles’ antwoordhierboven, stel rejectUnauthorizedin op false.

.typingsrc(geplaatst in de projectmap of in de hoofdmap van de gebruiker)

{
     "rejectUnauthorized": false,
     "registryURL": "http://api.typings.org/"
}

Voeg optioneel uw github-token toe (ik vond geen succes totdat ik dit ook had toegevoegd.)

{
    "rejectUnauthorized": false,
    "registryURL": "http://api.typings.org/",
    "githubToken": "YourGitHubToken"
}

Zie instructies voor het instellen van uw github-token op https://github.com/ blog/1509-personal-api-tokens


Antwoord 12, autoriteit 6%

Toevoegen:

process.env["NODE_TLS_REJECT_UNAUTHORIZED"]

Bron: Ongeldige zelf negeren – ondertekend SSL-certificaat in node.js met https.request?


Antwoord 13, autoriteit 6%

Ik ben hetzelfde probleem tegengekomen. Dit commando werkte ook niet voor mij:

npm config set strict-ssl false

Na dieper te hebben gegraven, kwam ik erachter dat deze link werd geblokkeerd door onze IT-beheerder.

http://registry.npmjs.org/npm

Dus als je met hetzelfde probleem wordt geconfronteerd, zorg er dan voor dat deze link eerst toegankelijk is voor je browser.


Antwoord 14, autoriteit 6%

Er zijn verschillende redenen voor dit probleem en de oplossing is afhankelijk van de situatie. Hier worden enkele tijdelijke oplossingen vermeld (let op: het is een onveilige oplossing, dus controleer uw organisatiebeleid voordat u het probeert).

voer hier de afbeeldingsbeschrijving in

Stap 1: Test en zorg ervoor dat internet werkt op de machine met de opdrachtprompt en dat dezelfde url direct toegankelijk is, wat mislukt door NPM. Er zijn veel tools hiervoor, zoals curl, wget etc. Als je windows gebruikt, probeer dan telnet of curl voor windows.

Stap 2: Stel strict ssl in op false met behulp van onderstaande opdracht

npm -g config set strict-ssl false

Stap 3: Stel niet-geautoriseerde TLS weigeren in op nee door het onderstaande commando te gebruiken:

export NODE_TLS_REJECT_UNAUTHORIZED=0

In het geval van vensters (of kan het scherm gebruiken om de omgevingsvariabele in te stellen):

set NODE_TLS_REJECT_UNAUTHORIZED=0

Stap 4: voeg een onveilige parameter toe aan het installatiecommando, bijvoorbeeld

npm i -g [email protected] --unsafe-perm true


Antwoord 15

set NODE_TLS_REJECT_UNAUTHORIZED=0

LEAVE A REPLY

Please enter your comment!
Please enter your name here

19 − 4 =

Other episodes