Utilizzando npm dietro proxy aziendale .pac

Ho bisogno di scaricare diversi pacchetti tramite npm, ma la nostra configurazione proxy aziendale è un file .pac (sono su Windows)

Ho già provato

npm config set proxy http://mydomain\username:[email protected]:8181/proxy.pac npm config set https-proxy http://mydomain\username:[email protected]:8181/proxy.pac 

o

 npm config set proxy http://1.2.3.4:8181/proxy.pac npm config set https-proxy http://1.2.3.4:8181/proxy.pac 

ma non funziona …

qualche suggerimento? Grazie

Ho appena avuto un problema molto simile, in cui non riuscivo a far funzionare npm dietro il nostro server proxy.

Il mio nome utente è del tipo “dominio \ nome utente” – inclusa la barra nella configurazione del proxy che ha portato alla visualizzazione di una barra. Quindi, inserendo questo:

 npm config set proxy "http://domain\username:[email protected]:port/" 

quindi eseguendo questo npm config get proxy restituisce questo: http: // dominio / nome utente: password @ nomeserver: porta /

Pertanto per risolvere il problema ho invece codificato l’URL con la barra rovesciata, quindi ho inserito questo:

 npm config set proxy "http://domain%5Cusername:[email protected]:port/" 

e con questo è stato corretto l’accesso proxy.

Cerca l’url del file pac nelle impostazioni di internet explorer lan e scarica il file pac dall’URL configurato. Il file pac è solo un file javascript con una funzione denominata FindProxyForURL che restituisce diversi host proxy in diversi scenari.

Prova a trovare un host in quel file pac che pensi sia per il traffico web generale e collegalo a .npmrc in C:\Users\\.npmrc

 proxy=http://:@proxyhost: https-proxy=http://:@proxyhost: 

Anche se è ansible accedere con il proprio dominio e nome utente sul proprio computer aziendale, è altamente ansible che il nome di dominio della directory utente attivo non sia richiesto per il proxy , solo il nome utente e la password (che potrebbero essere diversi dal login di Active Directory)

Non dimenticare di armeggiare con caratteri di password speciali in uscita.

Scarica il tuo file .pac . Aprilo in qualsiasi editor e cerca PROXY = "PROXY XXXX:80; Potresti avere molti proxy, copiare qualcuno di loro ed eseguire i seguenti comandi di terminale:

 npm config set proxy http://XXXX:80 npm config set https-proxy http://XXXX:80 

Ora dovresti essere in grado di installare qualsiasi pacchetto!

Ho risolto questo problema in questo modo:

1) Eseguo questo comando:

npm config set strict-ssl false

2) Quindi impostare npm per l’esecuzione con http, anziché https:

npm config set registry "http://registry.npmjs.org/"

3) Quindi installa il pacchetto

npm install

Per espandere la risposta @Steve Roberts.

Il mio nome utente è del tipo “dominio \ nome utente” – inclusa la barra nella configurazione del proxy che ha portato alla visualizzazione di una barra. Quindi, inserendo questo:

 npm config set proxy "http://domain\username:[email protected]:port/" 

Ho anche dovuto codificare l’URL nella mia stringa domain\user , tuttavia, ho uno spazio all’interno del mio nome utente, quindi inserisco un + per codificare la codifica dell’URL dello spazio, ma otterrebbe il doppio codificato come %2B (che è la codifica dell’URL per segno più, tuttavia la codifica dell’URL per uno spazio è %20 ), quindi ho dovuto fare invece quanto segue:

comando npm

 //option one //it works for some packages npm config set http_proxy "http://DOMAIN%5Cuser+name:[email protected]:port" npm config set proxy "http://DOMAIN%5Cuser+name:[email protected]:port" //option two //it works best for me //please notice that I actually used a space //instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded) npm config set http_proxy "http://DOMAIN%5Cuser name:[email protected]:port" npm config set proxy "http://DOMAIN%5Cuser name:[email protected]:port" 

risoluzione dei problemi di npm config

Ho usato la npm config list per ottenere i valori analizzati che avevo impostato sopra, ed è così che ho scoperto la doppia codifica. Strano.

Saluti.

VARIABILI AMBIENTALI WINDOWS (prompt CMD)

Aggiornare

Risulta che anche con le configurazioni di cui sopra, ho ancora avuto alcuni problemi con alcuni pacchetti / script che utilizzano internamente il client HTTP Request-Simplified per scaricare materiale. Quindi, come spiegato nel readme precedente, possiamo specificare variabili di ambiente per impostare il proxy sulla riga di comando, e Request onorerà quei valori.

Poi, dopo (e sono riluttante ad ammetterlo) diversi tentativi (più simili ai giorni), di cercare di impostare le variabili di ambiente, sono finalmente riuscito con le seguenti linee guida:

 rem notice that the value after the = has no quotations rem - I believe that if quotations are placed after it, they become rem part of the value, you do not want that rem notice that there is no space before or after the = sign rem - if you leave a space before it, you will be declaring a variable rem name that includes such space, you do not want to do that rem - if you leave a space after it, you will be including the space rem as part of the value, you do not want that either rem looks like there is no need to URL encode stuff in there SET HTTP_PROXY=http://DOMAIN\user name:[email protected]:port SET HTTPS_PROXY=http://DOMAIN\user name:[email protected]:port 

cntlm

Ho usato la tecnica di cui sopra per alcune settimane, fino a quando ho capito il sovraccarico di aggiornare la mia password su tutti gli strumenti che necessitavano della configurazione del proxy.

Oltre a npm, uso anche:

  • pergolato
  • vagabondo
    • scatola virtuale (linux in esecuzione)
    • apt-get [linux]
  • idiota
  • vscode
  • parentesi
  • atomo
  • tsd

cntlm Passaggi di installazione

Quindi, ho installato cntlm . L’impostazione di cntlm è piuttosto cntlm , si cerca il file ini @ C:\Program Files\Cntlm\cntlm.ini

  1. Apri C:\Program Files\Cntlm\cntlm.ini (potresti aver bisogno dei diritti di amministratore)
  2. cercare le linee Username e Domain (riga 8-9 penso)
    • aggiungi il tuo nome utente
    • aggiungi il tuo dominio
  3. All’esecuzione del prompt di cmd:

     cd C:\Program Files\Cntlm\ cntlm -M cntlm -H 
    • ti verrà chiesta la password:
      cygwin warning: MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini Preferred POSIX equivalent is: /Cntlm/cntlm.ini CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames Password: 
  4. L’output che ottieni da cntlm -H sarà simile a:

     PassLM 561DF6AF15D5A5ADG PassNT A1D651A5F15DFA5AD PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN' 
    • Si consiglia di utilizzare PassNTLMv2, quindi aggiungere una riga # prima di PassLM e PassNT o non utilizzarli
  5. Incolla l’output da cntlm -H sul file ini sostituendo le righe per PassLM , PassNT e PassNTMLv2 , oppure commenta le linee originali e aggiungi le tue.
  6. Aggiungi i tuoi server Proxy . Se non sai cosa sia il server proxy … Fai quello che ho fatto, ho cercato il mio file di auto-configurazione del proxy cercando la chiave del Registro di sistema AutoConfigURL in HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings . Passa a quell’URL e guarda attraverso il codice che sembra essere JavaScript.
  7. Facoltativamente è ansible modificare la porta in cui cntlm ascolta cambiando la riga Listen #### , dove #### è il numero di porta.

Imposta NPM con cntlm

Quindi, tu punti npm al tuo proxy cntml, puoi usare l’ip, ho usato localhost e la porta di default per cntlm 3128 così il mio url proxy è come questo

http://localhost:3128

Con il comando corretto:

npm config set proxy http: // localhsot: 3128

È molto più semplice Tu imposti tutti i tuoi strumenti con lo stesso URL e aggiorni la password solo in un posto. La vita è molto più semplice no.

È necessario impostare il certificato CA npm

Dalla documentazione di npm ca

Se il tuo proxy aziendale sta intercettando connessioni https con il proprio certificato autografato, questo è un must da evitare npm config set strict-ssl false (grande no-no).

Passaggi di base

  1. Ottieni il certificato dal tuo browser (Chromes funziona bene). Esportalo come X.509 codificato Base-64 (.CER)
  2. Sostituisci nuove righe con \n
  3. Modifica il tuo .npmrc aggiungi una riga ca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

Problemi

Ho notato che a volte qualche tipo di blocco di npm, quindi mi fermo (a volte forzatamente) cntlm e lo riavvio.

Ho avuto diversi problemi con questo e finalmente quello che ho fatto è il seguente:

  1. Usato Fiddler, con “Automatically Authenticate” selezionato
  2. Nelle regole personalizzate del violinista, ho aggiunto

     if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";} 
  3. Infine in npm ho impostato il proxy su http: // localhost: 8888

Questo ha funzionato bene.

È ansible controllare Fiddler se NPM sta dando errore di autenticazione. È facile da installare e configurare. Imposta la regola del violinista su Automatically Authenticated.In .npmrc imposta queste proprietà

 registry=http://registry.npmjs.org proxy=http://127.0.0.1:8888 https-proxy=http://127.0.0.1:8888 http-proxy=http://127.0.0.1:8888 strict-ssl=false 

Ha funzionato per me 🙂

Per tutti coloro che si trovano alle prese con un firewall aziendale e problemi con SSL (impossibilità di ottenere il certificato emittente locale), ecco alcuni passaggi che puoi provare:

Dimentica SSL

Se non sei preoccupato per SSL, puoi seguire i consigli di molti contributori precedenti impostando i tuoi proxy e modificando il registro nella versione non sicura:

 npm config set proxy http://username:[email protected]:port npm config set https-proxy http://username:[email protected]:port npm config set registry http://registry.npmjs.org/ 

Un rapido “trucco” qui, le mie credenziali proxy sono le stesse per le richieste protette e non protette (notare come ho lasciato il mio protocollo come http: // per la configurazione https-proxy ). Questo potrebbe essere lo stesso per te, e potrebbe non esserlo.

Voglio mantenere SSL

Se vuoi mantenere SSL e non vuoi usare strict-ssl=false , allora hai più lavoro da fare. Per quanto mi riguarda, sono protetto da un firewall aziendale e stiamo utilizzando certificati autofirmati, quindi ricevo l’errore in unable to get local issuer certificate . Se ti trovi sulla stessa barca, dovresti impostare l’opzione cafile= nel file di configurazione di npm. Innanzitutto, è necessario creare un file PEM che contenga informazioni sui certificati autofirmati. Se non sai come farlo, ecco le istruzioni per un ambiente Windows senza l’utilizzo di software di terze parti:

Dobbiamo indicare esplicitamente quali certificati devono essere considerati affidabili poiché stiamo utilizzando certificati di autofirmazione. Per il mio esempio, ho navigato su http://www.google.com utilizzando Chrome per prelevare i certificati.

In Chrome, vai a Controllo -> Sicurezza -> Visualizza certificato. Verranno visualizzati tutti i certificati che consentono la connessione SSL. Nota come questi certificati sono autofirmati. La parte sfuocata è la mia azienda e non siamo un’autorità certificata. È ansible esportare il percorso completo del certificato come file P7B oppure esportare i certificati singolarmente come file CER (codifica base64). Esportare il percorso completo come P7B non ti fa molto bene perché dovrai a turno aprire questo file in un gestore certificati ed esportarlo comunque come singoli file CER. In Windows, facendo doppio clic sul file P7B si aprirà l’applicazione Gestione certificati.

inserisci la descrizione dell'immagine qui

Esportare come CER (Base 64) è in realtà un file di testo nel seguente formato:

 -----BEGIN CERTIFICATE----- MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate... -----END CERTIFICATE----- 

Per creare il nostro file PEM, abbiamo semplicemente bisogno di sovrapporre questi certificati uno sopra l’altro in un singolo file e modificare l’estensione in .pem. Ho usato il blocco note per farlo.

I certificati vengono impilati in ordine inverso dal percorso del certificato. Così sopra, vorrei iniziare con * .google.com quindi incollare Websense sotto di esso, quindi Issuing CA 1 ecc. In questo modo i certificati vengono analizzati dall’alto verso il basso alla ricerca della CA root appropriata. La semplice integrazione della CA principale non funzionerà, ma non è necessario includere tutti i certificati. Dal percorso precedente, devo solo includere i certificati che precedono il certificato Websense (CA di emissione 1, CA di norme, CA principale).

Una volta che questi certificati autofirmati vengono salvati in un file PEM, siamo pronti ad indicare a npm di utilizzare questi certificati come la nostra CA attendibile. Basta impostare il file di configurazione e si dovrebbe essere a posto:

 npm config set cafile "C:\yourcerts.pem" 

Ora, con il set di proxy (http e https) e il registro impostato su https://registry.npmjs.org , dovresti essere in grado di installare pacchetti dietro un firewall aziendale con certificati autofirmati senza mettere a strict-ssl impostazione strict-ssl .

Prova questo, imposta il proxy in npm come segue

 npm config set proxy "http://:@:" npm config set https-proxy "http://:@:" npm config set strict-ssl false npm config set registry "http://registry.npmjs.org/" 

Otterrete l’host e la porta del proxy dall’amministratore o supporto del server.

Dopo questa configurazione

 npm config set http_proxy http://username:[email protected]:itsport npm config set proxy http://username:[email protected]:itsport 

Se c’è qualche carattere speciale nella password prova con% urlencode. Ad esempio: – pound (hash) shuold essere sostituito da% 23.

Questo ha funzionato per me …

Se sei dietro una rete aziendale con proxy, ho appena usato uno strumento proxy ntlm e ho usato la porta e il proxy forniti da ntlm, per instnce ho usato questa configurazione:

 strict-ssl=false proxy=http://localhost:3125 

Spero che aiuti.

Usa sotto il comando a cmd o GIT Bash o altro prompt

 $ npm config set proxy "http://192.168.1.101:4128" $ npm config set https-proxy "http://192.168.1.101:4128" 

dove 192.168.1.101 è proxy ip e 4128 è port. cambia in base alle impostazioni del proxy.

È necessario utilizzare “npm config set http-proxy

uso:

 npm config set http-proxy http://1.2.3.4:8181 npm config set https-proxy http://1.2.3.4:8181 

Prova questo, è stato l’unico che ha funzionato per me:

npm –proxy http: //: @proxyhost: –https-proxy http: //: @proxyhost: –strict-ssl false install -g package

Attendi l’opzione –strict-ssl false

In bocca al lupo.

L’impostazione del proxy NPM menzionata nella risposta accettata risolve il problema, ma come si può vedere in questo problema di npm , alcune dipendenze utilizzano GIT e ciò rende necessaria la configurazione del proxy git , e può essere fatta come segue:

 git config --global http.proxy http://username:[email protected]:port git config --global https.proxy http://username:[email protected]:port 

La configurazione del proxy NPM menzionata:

 npm config set proxy "http://username:[email protected]:port" npm config set https-proxy "http://username:[email protected]:port" npm config set strict-ssl false npm config set registry "http://registry.npmjs.org/" 

Ho avuto un problema simile e ho provato tutti i workaround sopra ma nessuno di loro ha funzionato per me (stavo usando caratteri speciali (come il simbolo ‘@’) nella mia password e ho anche bisogno di aggiungere il nome di dominio).

A parte questo, ero un po ‘preoccupato di aggiungere la mia password come testo normale. È risultato che la soluzione più semplice per superare tutte queste sfide era quella di utilizzare una sorta di proxy inverso (come Fiddler).

Ho già dettagliato i passaggi di configurazione in questa risposta in SO.

Al lavoro usiamo ZScaler come nostro proxy. L’unico modo in cui sono riuscito a far funzionare npm era usare Cntlm .

Vedi questa risposta:

NPM dietro il proxy NTLM

L’aggiunta delle righe sottostanti nel file .typingsrc mi ha aiutato.

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

Ho riscontrato un problema simile e ho scoperto che il mio file di configurazione npm (.npmrc) ha una voce di registro errata. commentato e ri installato npm. ha funzionato.

Sistema operativo: Windows 7

Passi che hanno funzionato per me:

  1. npm config get proxy
  2. npm config get https-proxy

  3. Commenti: ho eseguito questo comando per conoscere le mie impostazioni proxy
    npm config rm proxy

  4. npm config rm https-proxy
  5. npm config set registry=http://registry.npmjs.org/
  6. npm install

Perché ho ancora problemi con l’impostazione delle impostazioni proxy al lavoro e spegnendole a casa, ho script e pubblicare npm-corpo-proxy.sh . In ogni corpo la password deve essere cambiata spesso e deve contenere caratteri speciali, che devono essere codificati prima di alimentare npm config (lo stesso per il dominio forma backash \ utente).

Da una piccola ricerca su google la prima cosa che ho provato è stata questa

 npm config set registry http://registry.npmjs.org/ npm config set proxy "your proxy" npm config set https-proxy "your proxy" 

Ma ancora npm sembrava perdere la connessione quando si cerca di fare “npm install”. poi ho eseguito questa riga nel prompt dei comandi e ora posso usare l’installazione di npm

 set NODE_TLS_REJECT_UNAUTHORIZED=0