Usando npm atrás do proxy corporativo .pac

Eu preciso baixar vários pacotes através do npm, mas a nossa configuração de proxy corporativo é um arquivo .pac (estou no Windows)

Eu já tentei

npm config set proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac npm config set https-proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac 

ou

 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 

mas não funciona …

alguma sugestão? obrigado

Acabei de ter um problema muito semelhante, em que não consegui fazer o npm funcionar atrás do nosso servidor proxy.

Meu nome de usuário é do tipo “domínio \ nome do usuário” – incluindo a barra na configuração do proxy resultou em uma barra invertida aparecendo. Então, digitando isso:

 npm config set proxy "http://domain\username:password@servername:port/" 

em seguida, executando este npm config get proxy retorna isso: http: // domain / username: senha @ nome_do_servidor: port /

Portanto, para corrigir o problema eu em vez disso, URL codificado a barra invertida, então entrou este:

 npm config set proxy "http://domain%5Cusername:password@servername:port/" 

e com isso o access proxy foi corrigido.

Procure a URL do arquivo pac nas configurações de Internet explorer lan e faça o download do arquivo pac a partir da URL configurada. O arquivo pac é apenas um arquivo javascript com uma function chamada FindProxyForURL que retorna hosts proxy diferentes em diferentes cenários.

Tente encontrar um host nesse arquivo pac que você acha que é para o tráfego geral da web e conecte-o em .npmrc em C:\Users\\.npmrc

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

Mesmo que você possa fazer login com seu domínio e nome de usuário em sua máquina corporativa, é altamente possível que o nome de domínio do diretório ativo do usuário não seja necessário para o proxy , apenas o nome de usuário e senha (que pode ser diferente do login do Active Directory)

Não se esqueça de mexer com caracteres especiais de senha.

Baixe o seu arquivo .pac . Abra-o em qualquer editor e procure por PROXY = "PROXY XXXX:80; Você pode ter muitos proxies, copiar qualquer um deles e rodar os seguintes comandos do terminal:

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

Agora você deve poder instalar qualquer pacote!

Eu resolvi este problema desta maneira:

1) Eu corro este comando:

npm config set strict-ssl false

2) Em seguida, defina o npm para executar com http, em vez de https:

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

3) Em seguida, instale seu pacote

npm install

Para expandir a resposta do @Steve Roberts.

Meu nome de usuário é do tipo “domínio \ nome do usuário” – incluindo a barra na configuração do proxy resultou em uma barra invertida aparecendo. Então, digitando isso:

 npm config set proxy "http://domain\username:password@servername:port/" 

Eu também tive que URL codificar minha cadeia de domain\user , no entanto, eu tenho um espaço dentro do meu nome de usuário, então eu coloco um + para codificar a codificação de URL de espaço, mas seria duplamente codificado como %2B (que é a codificação URL para o sinal de mais, no entanto, a codificação de URL para um espaço é %20 ), então eu tive que fazer o seguinte:

comando npm

 //option one //it works for some packages npm config set http_proxy "http://DOMAIN%5Cuser+name:password@xxxx:port" npm config set proxy "http://DOMAIN%5Cuser+name:password@xxxx: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:password@xxxx:port" npm config set proxy "http://DOMAIN%5Cuser name:password@xxxx:port" 

resolução de problemas do npm config

Eu usei a npm config list do npm config list para obter os valores analisados ​​que eu defini acima, e foi assim que descobri a codificação dupla. Esquisito.

Saudações.

VARIÁVEIS DE AMBIENTE DO WINDOWS (prompt do CMD)

Atualizar

Acontece que, mesmo com as configurações acima, ainda tive alguns problemas com alguns pacotes / scripts que usam o cliente HTTP de solicitação – simplificado internamente para fazer download de material. Assim, como explicado acima, leia-se, podemos especificar variables ​​de ambiente para definir o proxy na linha de comando, e o Request irá honrar esses valores.

Então, depois (e estou relutante em admitir isso) várias tentativas (mais como dias), de tentar definir as variables ​​de ambiente, finalmente consegui com as seguintes diretrizes:

 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:password@xxxx:port SET HTTPS_PROXY=http://DOMAIN\user name:password@xxxx:port 

cntlm

Usei a técnica acima por algumas semanas, até perceber a sobrecarga de atualizar minha senha em todas as ferramentas que precisavam da configuração do proxy.

Além do npm, eu também uso:

  • pavilhão
  • vagrant
    • checkbox virtual (executando linux)
    • apt-get [linux]
  • git
  • vscode
  • colchetes
  • átomo
  • tsd

Etapas de instalação do cntlm

Então, eu instalei o cntlm . Definir cntlm é bem claro, você procura o arquivo ini @ C:\Program Files\Cntlm\cntlm.ini

  1. Abra C:\Program Files\Cntlm\cntlm.ini (você pode precisar de direitos de administrador)
  2. procure por linhas de nome de Username e Domain (linha 8-9 eu acho)
    • adicione seu nome de usuário
    • adicione seu domínio
  3. No prompt do cmd, execute:

     cd C:\Program Files\Cntlm\ cntlm -M cntlm -H 
    • você será solicitado a senha:
      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. A saída que você obtém de cntlm -H será algo como:

     PassLM 561DF6AF15D5A5ADG PassNT A1D651A5F15DFA5AD PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN' 
    • Recomenda-se que você use PassNTLMv2 para adicionar um # antes da linha PassLM e PassNT ou não usá-los
  5. Cole a saída de cntlm -H no arquivo ini, substituindo as linhas de PassLM , PassNT e PassNTMLv2 , ou comente as linhas originais e adicione a sua.
  6. Adicione seus servidores Proxy . Se você não sabe o que é o servidor proxy … Faça o que eu fiz, procurei por meu arquivo de configuração automática de proxy procurando pela chave de registro AutoConfigURL em HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings . Navegue até esse URL e veja o código que é JavaScript.
  7. Opcionalmente, você pode alterar a porta onde cntlm escuta, alterando a linha Listen #### , onde #### é o número da porta.

Configurar NPM com cntlm

Então, você aponta o npm para o seu proxy cntml, você pode usar o ip, eu usei o localhost e a porta padrão para o cntlm 3128 então o URL do meu proxy se parece com isso

http://localhost:3128

Com o comando adequado:

npm config set proxy http: // localhsot: 3128

É muito mais simples. Você configura todas as suas ferramentas com o mesmo URL e atualiza a senha em um só lugar. A vida é muito mais simples não.

Deve configurar o certificado npm CA

Da documentação do npm ca

Se o seu proxy corporativo estiver interceptando conexões https com seu próprio certificado com assinatura própria, é necessário evitar npm config set strict-ssl false (grande não-não).

Etapas básicas

  1. Obtenha o certificado do seu navegador (o Chromes funciona bem). Exportá- lo como X.509 codificado na base 64 (.CER)
  2. Substitua novas linhas por \n
  3. Edite seu .npmrc adicione uma linha ca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

Problemas

Eu notei que às vezes npm tipo de trava, então eu paro (às vezes com força) cntlm e reiniciá-lo.

Eu tive vários problemas com isso e finalmente o que fiz foi o seguinte:

  1. Fiddler usado, com “Autenticar automaticamente” selecionado
  2. Nas regras personalizadas do violinista, eu adicionei

     if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";} 
  3. Finalmente no npm eu configurei o proxy para http: // localhost: 8888

Isso funcionou bem.

Você pode verificar o Fiddler se o NPM estiver causando erro de autenticação. É fácil de instalar e configurar. Definir a regra do Fiddler como Autenticada automaticamente.No .npmrc, configure essas propriedades

 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 

Funcionou para mim 🙂

Para quem está lutando por trás de um firewall corporativo, bem como problemas com SSL (não é possível obter o certificado de emissor local), aqui estão algumas etapas que você pode tentar:

Esqueça o SSL

Se você não estiver preocupado com o SSL, poderá seguir o conselho de muitos dos contribuidores anteriores configurando seus proxies e alterando o registro para a versão não segura:

 npm config set proxy http://username:password@proxyname:port npm config set https-proxy http://username:password@proxyname:port npm config set registry http://registry.npmjs.org/ 

Uma “pegadinha” rápida aqui, minhas credenciais de proxy são as mesmas para solicitações seguras e não seguras (observe como deixei meu protocolo como http: // para a configuração de proxy https ). Isso pode ser o mesmo para você, e talvez não.

Eu quero manter SSL

Se você quiser manter SSL e não quiser usar strict-ssl=false , terá mais trabalho a fazer. Para mim, estou atrás de um firewall corporativo e estamos usando certificados auto-assinados, então recebo o erro unable to get local issuer certificate . Se você estiver no mesmo barco que eu, precisará definir a opção cafile= no arquivo de configuração do npm. Primeiro, você precisa criar um arquivo PEM que contenha informações sobre seus certificados auto-assinados. Se você não sabe como fazer isso, aqui estão as instruções para um ambiente Windows sem usar software de terceiros:

Precisamos indicar explicitamente quais certificados devem ser confiáveis ​​porque estamos usando certificados de assinatura automática. No meu exemplo, naveguei para http://www.google.com usando o Chrome para poder pegar os certificados.

No Chrome, vá para Inspecionar -> Segurança -> Visualizar certificado. Você verá todos os certificados que permitem a conexão SSL. Observe como esses certificados são auto-assinados. A parte desfocada é minha empresa e não somos uma Autoridade Certificada. Você pode exportar o caminho completo do certificado como um arquivo P7B ou exportar os certificados individualmente como arquivos CER (codificação base64). Exportar o caminho completo como P7B não faz muito bem, pois, por sua vez, você precisará abrir esse arquivo em um gerenciador de certificados e exportar como arquivos individuais do CER de qualquer maneira. No Windows, clicar duas vezes no arquivo P7B abrirá o aplicativo Gerenciador de Certificados.

insira a descrição da imagem aqui

Exportar como CER (Base 64) é realmente um arquivo de texto no seguinte formato:

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

Para criar nosso arquivo PEM, simplesmente precisamos empilhar esses certificados uns em cima dos outros em um único arquivo e mudar a extensão para .pem. Eu usei o bloco de notas para fazer isso.

Você empilha os certificados na ordem inversa do caminho do certificado. Então, eu começaria com * .google.com, em seguida, colaria o Websense abaixo dele, em seguida, emitindo CA 1, etc. Dessa forma, os certificados são analisados ​​de cima para baixo, procurando a CA raiz apropriada. Simplesmente include a CA raiz não funcionará, mas também não precisamos include todos os certificados. Do caminho acima, eu só preciso include os certificados que vêm antes do certificado Websense (Emissão de CA 1, CA da política, CA raiz).

Depois que esses certificados auto-assinados forem salvos em um arquivo PEM, estaremos prontos para instruir o npm a usar esses certificados como nossa CA confiável. Basta definir o arquivo de configuração e você deve estar pronto:

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

Agora, com seus proxies definidos (http e https), e o registro configurado para https://registry.npmjs.org , você deve ser capaz de instalar pacotes atrás de um firewall corporativo com certificados autoassinados sem violar a configuração strict-ssl .

Tente isso, defina o proxy em npm da seguinte forma

 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/" 

Você obterá o host do proxy e a porta do administrador ou suporte do servidor.

Depois disso, configure

 npm config set http_proxy http://username:password@proxyofmycomp.com:itsport npm config set proxy http://username:password@proxyofmycomp.com:itsport 

Se houver algum caractere especial na senha, tente com% urlencode. Por exemplo: – pound (hash) shuold deve ser substituído por% 23.

Isso funcionou para mim …

Se você está atrás de uma rede corporativa com proxy, eu usei apenas uma ferramenta de proxy ntlm e usei a porta e o proxy fornecidos pelo ntlm, por exemplo, eu usei esta configuração:

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

Eu espero que isso ajude.

Use o comando abaixo em cmd ou GIT Bash ou outro prompt

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

onde 192.168.1.101 é proxy ip e 4128 é port. mudar de acordo com suas configurações de proxy.

Você deve usar “npm config set http-proxy

usar:

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

Tente isso, foi o único que funcionou para mim:

npm –proxy http: //: @proxyhost: –https-proxy http: //: @proxyhost: –strict-ssl falso instalar o pacote -g

Preste atenção à opção –strict-ssl false

Boa sorte.

A configuração do proxy NPM mencionada na resposta aceita resolve o problema, mas como você pode ver neste problema do npm , algumas dependencies usam o GIT e isso torna a configuração do proxy git necessária e pode ser feita da seguinte maneira:

 git config --global http.proxy http://username:password@host:port git config --global https.proxy http://username:password@host:port 

A configuração do proxy NPM mencionada:

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

Eu tive um problema semelhante e tentei todas as soluções alternativas acima, mas nenhuma delas funcionou para mim (eu estava usando caracteres especiais (como o símbolo ‘@’) na minha senha e também precisei adicionar o nome de domínio).

Além disso, fiquei um pouco apreensivo ao adicionar minha senha como texto simples. Acontece que a solução mais fácil para superar todos esses desafios era usar algum tipo de proxy reverso (como o Fiddler).

Eu já detalhei as etapas de configuração nesta resposta em SO.

No trabalho, usamos o ZScaler como nosso proxy. A única maneira que consegui fazer com que o npm funcionasse era usar o Cntlm .

Veja esta resposta:

NPM por trás do proxy NTLM

Adicionando as linhas abaixo no arquivo .typingsrc me ajudou.

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

Eu corri para um problema semelhante e descobri que o meu arquivo de configuração do npm (.npmrc) está tendo input de registro errado. comentou e voltou a instalar o npm. funcionou.

SO: Windows 7

Passos que funcionaram para mim:

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

  3. Comentários: Eu executei este comando para conhecer minhas configurações de proxy
    npm config rm proxy

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

Como ainda tenho problemas em definir configurações de proxy no trabalho e desativá- las em casa, criei scripts e publico npm-corpo-proxy.sh . Em cada corpo, a senha deve ser mudada com freqüência e deve conter caracteres especiais, que devem ser codificados antes de alimentar a configuração do npm (o mesmo para o domínio do usuário do backash).

De uma pequena pesquisa no google a primeira coisa que eu tentei foi isso

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

Mas ainda npm parecia perder a conexão ao tentar fazer “npm install” s. então eu corri esta linha no prompt de comando e agora eu posso usar o npm install

 set NODE_TLS_REJECT_UNAUTHORIZED=0