ใช้ NPM เบื้องหลัง .pac พร็อกซีขององค์กร


158

ฉันจำเป็นต้องดาวน์โหลดแพ็คเกจต่าง ๆ ผ่าน npm แต่การกำหนดค่าพร็อกซีองค์กรของเราเป็นไฟล์. pac (ฉันอยู่บน windows)

ผมได้พยายามแล้ว

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

หรือ

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

แต่มันไม่ทำงาน ...

ข้อเสนอแนะใด ๆ ขอบคุณ



8
ฉันไม่คิดว่าคำถามนี้ซ้ำซ้อนสคริปต์ pac สามารถมีหลายที่อยู่พร็อกซีขึ้นอยู่กับ IP ปลายทาง / โฮสต์ที่อยู่ในขณะที่ dube เพียง 1 ที่อยู่พร็อกซีที่อยู่ - จากการตรวจสอบ
Ferrybig

1
ไม่ใช่คำตอบเดียวที่บ่งบอกถึงวิธีการใช้สคริปต์ pac ซึ่งสามารถมีหลายที่อยู่พร็อกซีขึ้นอยู่กับที่อยู่ ip / โฮสต์เป้าหมาย ทุกคนสามารถช่วยได้โปรด
Partha Sarathi Ghosh

2
สำหรับฉันมันช่วยเปิดproxy.pacไฟล์เพื่อรับที่อยู่พร็อกซีจากมัน (ในกรณีของฉันฉันต้องเปลี่ยนพอร์ตไปที่ 8080)
Nomad

@ParthaSarathiGhosh คุณกำลังขวาไม่มีคำตอบจริงอธิบายวิธีการใช้สคริปต์ PAC ดังนั้นฉันได้เพิ่มคำตอบที่อยู่ที่นี้อีก: stackoverflow.com/a/61811444 มันไม่กี่ปีที่ผ่านมา แต่ดีกว่าไม่สาย?
user1031921

คำตอบ:


204

ฉันเพิ่งมีปัญหาที่คล้ายกันมากที่ฉันไม่สามารถรับ NPM ในการทำงานอยู่เบื้องหลังพร็อกซีเซิร์ฟเวอร์ของเรา

ชื่อผู้ใช้ของฉันอยู่ในรูปแบบ "domain \ ชื่อผู้ใช้" - รวมถึงเครื่องหมายสแลชในการกำหนดค่าพร็อกซีส่งผลให้สแลชปรากฏขึ้น ดังนั้นเข้ามานี้:

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

จากนั้นการรันnpm config get proxyจะส่งคืนสิ่งนี้: http: // โดเมน / ชื่อผู้ใช้: รหัสผ่าน @ servername: พอร์ต /

ดังนั้นเพื่อแก้ไขปัญหาผมแทนเข้ารหัส URL ทับขวาเพื่อป้อนนี้:

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

และด้วยวิธีนี้การเข้าถึงพร็อกซีได้รับการแก้ไข


5
มันทำให้คุณหายไป% 5C ส่วนที่สำคัญคือซี .... เห็นว่าฉันเว้นระยะไว้สำหรับ ya
sinisterrook

1
ฉันเพิ่งอัปเดตบางสิ่งและพร็อกซีของฉันหยุดทำงานอีกครั้ง ปรากฏว่าในการตั้งค่า "พร็อกซี" ของไฟล์. npmrc (ดังที่ระบุไว้ด้านล่างโดย @Ovidiu Buligan) มันมี% 5C สำหรับแบ็กสแลช แต่ "https-proxy" เพิ่งมี "\" การเปลี่ยนเป็น% 5C สามารถแก้ไขปัญหาได้ ฉันคิดว่าสิ่งนี้อาจได้รับการอัปเดตด้วยการเรียกใช้การกำหนดค่า npm http_proxy " โดเมน% 5 ชื่อผู้ใช้: รหัสผ่าน @ servername: พอร์ต /"
Steve Roberts

1
ฉันกำลังพยายามกำหนดค่า npm หลังพร็อกซี แต่มีวิธีการทำ "ping" โดยใช้การกำหนดค่า npm เพราะหากความเชื่อมั่นของฉันผิดผู้ใช้ของฉันจะถูกบล็อกในโดเมนองค์กรของฉัน
Ricardo

3
สิ่งที่ทำงานสำหรับฉันคือการที่ล้างตัวแปรสิ่งแวดล้อมยี้แรก ใช้set HTTP_PROXY =และตั้ง HTTPS_PROXY =
Sydwell

4
เพิ่มstrict-ssl=falseไปยัง.npmrcไฟล์ config แก้ไขได้สำหรับฉันที่อยู่เบื้องหลังพร็อกซี่องค์กร - ดูคำตอบจาก@ Ovidiu-buliganและ@ Karthikeyan-A
อเล็กซานเด McFarlane

64

ค้นหา URL ของpacไฟล์ในการตั้งค่า lan explorer อินเทอร์เน็ตและดาวน์โหลดไฟล์ pac จาก URL ที่กำหนดค่า ไฟล์ pac เป็นเพียงไฟล์จาวาสคริปต์ที่มีฟังก์ชั่นชื่อFindProxyForURLซึ่งจะส่งคืนโฮสต์พร็อกซีที่แตกต่างกันในสถานการณ์ที่แตกต่างกัน

พยายามที่จะหาพื้นที่ในแฟ้ม PAC ที่ที่คุณคิดว่าสำหรับการเข้าชมเว็บทั่วไปและเสียบเข้า .npmrc ใน C:\Users\<username>\.npmrc

proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

แม้ว่าคุณอาจจะเข้าสู่ระบบด้วยชื่อผู้ใช้และโดเมนของคุณบนเครื่องขององค์กรของคุณ มันเป็นไปได้สูงว่าชื่อโดเมนของ Active Directory ผู้ใช้ไม่จำเป็นสำหรับผู้รับมอบฉันทะเพียงชื่อผู้ใช้และรหัสผ่าน (ซึ่งอาจจะแตกต่างจากการเข้าสู่ระบบของ Active Directory)

อย่าลืมเล่นซอด้วยการหลีกเลี่ยงอักขระรหัสผ่านพิเศษ


ขอบคุณ ฉันไปที่. npmrc และเปลี่ยนการตั้งค่า มันทำงาน
ARN-ARN

54

ดาวน์โหลด.pacไฟล์ของคุณ เปิดในโปรแกรมแก้ไขใด ๆ PROXY = "PROXY X.X.X.X:80;และมองหา คุณอาจมีหลายผู้รับคัดลอกใด ๆ ของพวกเขาและเรียกใช้คำสั่งเทอร์มินัลต่อไปนี้:

npm config set proxy http://X.X.X.X:80
npm config set https-proxy http://X.X.X.X:80

ตอนนี้คุณน่าจะสามารถติดตั้งแพ็คเกจใดก็ได้!


1
สำหรับส่วนที่ https-พร็อกซี่ที่ผมต้องทำ "... ชุด https-พร็อกซี = http: // ..." แทน "... ชุด https-พร็อกซี่ http: // ..." มันมัน งาน. แค่ $ .02 ของฉัน
Nick

ขอบคุณการตั้งค่า https-proxy เป็น http: // เป็นสิ่งเดียวที่ใช้ได้ผล หลังจากฉันยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อม http_proxy และ https_proxy จาก bash!
Alex Punnen

สำหรับ https-proxy ฉันไม่สามารถตั้งค่าเป็น "set https-proxy https: /.../" ฉันต้องตั้งค่าเป็น "set https-proxy http: // ... " (ข้อมูลพร็อกซีจาก https -> http)
ดาวอังคาร

กันไปสำหรับคอมไพล์ด้วยgit config --global http.proxy http://X.X.X.X:80 git config --global https.proxy http://X.X.X.X:80
รหัสชื่อแจ็ค

38

ฉันจะแก้ไขปัญหานี้ด้วยวิธีนี้:

1) ฉันเรียกใช้คำสั่งนี้:

npm config set strict-ssl false

2) จากนั้นตั้งค่า NPM เพื่อให้ทำงานด้วย http แทน https:

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

3) จากนั้นติดตั้งแพคเกจของคุณ

npm install <package name>


2
เพียงเพื่อชี้ให้เห็นว่าการตั้งค่าของ NPM เข้มงวด SSLเพื่อเท็จเป็นปัญหาด้านความปลอดภัย พิจารณาการตั้งค่าca[]คุณสมบัติอย่างเหมาะสมแทน ในเวลา npm
แอรอน C

26

หากต้องการขยายคำตอบ @Steve Roberts

ชื่อผู้ใช้ของฉันอยู่ในรูปแบบ "domain \ ชื่อผู้ใช้" - รวมถึงเครื่องหมายสแลชในการกำหนดค่าพร็อกซีส่งผลให้สแลชปรากฏขึ้น ดังนั้นเข้ามานี้:

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

ฉันต้อง URL เข้ารหัสdomain\userสตริงของฉันอย่างไรก็ตามฉันมีช่องว่างในชื่อผู้ใช้ของฉันดังนั้นฉันจึงใส่+รหัสเพื่อเข้ารหัสช่องว่าง URL แต่มันจะได้รับการเข้ารหัสสองเท่าเป็น%2B(ซึ่งเป็นการเข้ารหัส URL สำหรับเครื่องหมายบวก แต่ URL การเข้ารหัสสำหรับพื้นที่คือ%20) ดังนั้นฉันต้องทำดังต่อไปนี้แทน:

คำสั่ง npm

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

// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"

การแก้ไขปัญหาการกำหนดค่า npm

ฉันใช้npm config listเพื่อรับค่าการแยกวิเคราะห์ที่ฉันตั้งไว้ข้างต้นและนั่นคือวิธีที่ฉันค้นพบเกี่ยวกับการเข้ารหัสสองครั้ง แปลก.

เป็นหลักคุณต้องเข้าใจข้อกำหนดต่อไปนี้:

  1. เป็นDOMAINสตริงที่จำเป็นสำหรับการตรวจสอบ
  2. คุณต้องการเข้ารหัสอักขระพิเศษหรือไม่
    • ช่องว่างและที่ (@) สัญญาณมีความท้าทายเป็นพิเศษ

ความนับถือ.

ตัวแปรสภาพแวดล้อมของ Windows (พร้อมรับคำ CMD)

ปรับปรุง

ปรากฎว่าแม้จะมีการกำหนดค่าข้างต้นฉันยังคงมีปัญหาบางอย่างกับแพ็คเกจ / สคริปต์ที่ใช้Request - ไคลเอ็นต์ HTTP แบบง่ายภายในเพื่อดาวน์โหลดเนื้อหา ดังนั้นตามที่ readme อธิบายไว้ข้างต้นเราสามารถระบุตัวแปรสภาพแวดล้อมได้เพื่อตั้งค่าพร็อกซีในบรรทัดคำสั่งและคำขอจะให้เกียรติค่าเหล่านั้น

จากนั้นหลังจาก(และฉันลังเลที่จะยอมรับสิ่งนี้)พยายามหลายครั้ง (มากกว่าวัน) การพยายามตั้งค่าตัวแปรสภาพแวดล้อมในที่สุดฉันก็ทำตามแนวทางต่อไปนี้ได้สำเร็จ:

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

cntlm

ฉันใช้เทคนิคด้านบนเป็นเวลาสองสามสัปดาห์จนกระทั่งฉันตระหนักถึงค่าใช้จ่ายในการอัปเดตรหัสผ่านของฉันในเครื่องมือทั้งหมดที่จำเป็นต้องมีการตั้งค่าพร็อกซี

นอกจากนี้ฉันยังใช้:

  • ซุ้มไม้ในสวน
  • คนจรจัด
    • กล่องเสมือน (ใช้ linux)
    • apt-get [linux]
  • คอมไพล์
  • vscode
  • วงเล็บ
  • อะตอม
  • ศูนย์รับฝากหลักทรัพย์

ขั้นตอนการติดตั้ง cntlm

ดังนั้นผมติดตั้งcntlm การตั้งค่าcntlmเป็นสิ่งที่ค่อนข้างก้าวไปข้างหน้าคุณมองหาไฟล์ ini @C:\Program Files\Cntlm\cntlm.ini

  1. เปิดC:\Program Files\Cntlm\cntlm.ini(คุณอาจต้องการสิทธิ์ผู้ดูแลระบบ)
  2. มองหาUsernameและDomainบรรทัด (บรรทัด 8-9 ฉันคิดว่า)
    • เพิ่มชื่อผู้ใช้ของคุณ
    • เพิ่มโดเมนของคุณ
  3. เมื่อ cmd ให้เรียกใช้:

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    • คุณจะถูกถามรหัสผ่าน:
     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. ผลลัพธ์ที่คุณได้รับcntlm -Hจะมีลักษณะดังนี้:

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    • ขอแนะนำให้คุณใช้ PassNTLMv2 เพื่อเพิ่ม#บรรทัดก่อนหน้าPassLMและPassNTหรือไม่ใช้
  5. วางเอาต์พุตจากcntlm -Hบนไฟล์ ini เพื่อแทนที่บรรทัดสำหรับPassLM, PassNTและPassNTMLv2, หรือคอมเม้นต์บรรทัดต้นฉบับและเพิ่มของคุณ
  6. เพิ่มProxyเซิร์ฟเวอร์ของคุณ หากคุณไม่ทราบว่าพร็อกซีเซิร์ฟเวอร์คืออะไรทำในสิ่งที่ฉันทำฉันค้นหาไฟล์พร็อกซีกำหนดค่าอัตโนมัติโดยค้นหาAutoConfigURLคีย์รีจิสทรีในHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settingsคีย์รีจิสทรีในนำทางไปยัง URL นั้นและดูรหัสที่เกิดขึ้นเป็น JavaScript
  7. ไม่บังคับคุณสามารถเปลี่ยนพอร์ตที่ cntlm ฟังโดยเปลี่ยนListen ####บรรทัดโดยที่####คือหมายเลขพอร์ต

ตั้งค่า NPM ด้วย cntlm

ดังนั้นคุณชี้ npm ไปที่พร็อกซี cntml ของคุณคุณสามารถใช้ ip ที่ฉันใช้localhostและพอร์ตเริ่มต้นสำหรับ cntlm 3128ดังนั้น URL พร็อกซีของฉันจึงมีลักษณะเช่นนี้

http://localhost:3128

ด้วยคำสั่งที่เหมาะสม:

การตั้งค่าพร็อกซี npm config http: // localhost: 3128

ง่ายกว่ามาก คุณตั้งค่าเครื่องมือทั้งหมดของคุณด้วย URL เดียวกันนั้นและคุณอัปเดตรหัสผ่านได้ในที่เดียว ชีวิตนั้นง่ายกว่านี้มาก

ต้องติดตั้งใบรับรอง CA npm

จากเอกสาร npm ca

หากพร็อกซีองค์กรของคุณกำลังขัดขวางการเชื่อมต่อ https กับใบรับรองที่ลงชื่อด้วยตนเองของตนเองนี่เป็นสิ่งที่ต้องหลีกเลี่ยง npm config set strict-ssl false (ไม่มีใหญ่)

ขั้นตอนพื้นฐาน

  1. รับใบรับรองจากเบราว์เซอร์ของคุณ (Chromes ทำงานได้ดี) ส่งออกเป็นBase-64 ที่เข้ารหัส X.509 (.CER)
  2. แทนที่บรรทัดใหม่ด้วย \n
  3. แก้ไขการ.npmrcเพิ่มบรรทัดของคุณca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

ประเด็น

ฉันสังเกตเห็นว่าบางครั้งก็มีการแฮงก์ npm ดังนั้นฉันจึงหยุด (บางครั้งแรง) cntlmแล้วรีสตาร์ท


7

ฉันพบปัญหาหลายอย่างกับสิ่งนี้และในที่สุดสิ่งที่ฉันทำคือ:

  1. ใช้พู้ทำเล่นพร้อมเลือก "รับรองความถูกต้องอัตโนมัติ"
  2. ในกฎที่กำหนดเองพู้ทำเล่นฉันเพิ่ม

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
  3. ในที่สุดใน npm ฉันตั้งค่าพร็อกซีเป็นhttp: // localhost: 8888

มันใช้งานได้ดี


ขอบคุณ! ทำงานเหมือนมีเสน่ห์ !! สถานการณ์ของฉัน: ชื่อผู้ใช้เป็นรูปแบบ "โดเมน / ชื่อผู้ใช้" รหัสผ่านมีเครื่องหมาย "@" อยู่ ไม่ได้มีการทำ URL ใด ๆ การเข้ารหัส / ถอดรหัส ฯลฯ ที่ทุกคน
A_B

ทำงานอย่างสมบูรณ์แบบสำหรับฉัน ขอบคุณมาก. เพียงแค่ต้องการชี้ให้เห็นว่าการใช้"domain\\username:password"สามารถก่อให้เกิดภัยคุกคามความปลอดภัยของ Identity Theft แทนที่จะใช้การ"(default)"กำหนดค่าในกฎที่กำหนดเองทำงานอย่างมีเสน่ห์ พู้ทำเล่นต้องทำงานในขณะที่คุณใช้ "npm" เพื่อให้สิ่งนี้ทำงาน
pk10

7

สำหรับทุกคนที่ดิ้นรนกับไฟร์วอลล์ขององค์กรรวมถึงปัญหาเกี่ยวกับ SSL (ไม่สามารถรับใบรับรองผู้ออกใบรับรองในท้องถิ่น) นี่คือขั้นตอนที่คุณสามารถลองได้:

ลืมเกี่ยวกับ SSL

หากคุณไม่กังวลเกี่ยวกับ SSL คุณสามารถทำตามคำแนะนำของผู้ให้ข้อมูลก่อนหน้านี้หลายคนโดยตั้งค่าพร็อกซีของคุณและเปลี่ยนรีจิสทรีเป็นรุ่นที่ไม่ปลอดภัย:

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/

อย่างรวดเร็ว "gotcha" ที่นี่ข้อมูลรับรองพร็อกซีของฉันเหมือนกันสำหรับคำขอที่ปลอดภัยและไม่ปลอดภัย (สังเกตว่าฉันทิ้งโปรโตคอลไว้เป็นhttp: //สำหรับการกำหนดค่าhttps-proxy ) สิ่งนี้อาจเหมือนกันสำหรับคุณและอาจไม่เหมือนกัน

ฉันต้องการเก็บ SSL

หากคุณต้องการเก็บ SSL ไว้และไม่ต้องการใช้strict-ssl=falseคุณก็มีงานต้องทำอีกมาก unable to get local issuer certificateสำหรับผมผมหลังไฟร์วอลล์ขององค์กรและเราจะใช้ใบรับรองลงนามด้วยตนเองดังนั้นฉันรับข้อผิดพลาด หากคุณอยู่ในเรือลำเดียวกันกับฉันคุณจะต้องตั้งค่าcafile=ตัวเลือกในไฟล์กำหนดค่าnpm ก่อนอื่นคุณต้องสร้างไฟล์ PEM ซึ่งเก็บข้อมูลเกี่ยวกับใบรับรองที่ลงชื่อด้วยตนเองของคุณ หากคุณไม่ทราบวิธีการดังกล่าวต่อไปนี้เป็นคำแนะนำสำหรับสภาพแวดล้อม Windows โดยไม่ต้องใช้ซอฟต์แวร์บุคคลที่สาม:

เราต้องระบุอย่างชัดเจนว่าใบรับรองใดที่ควรเชื่อถือได้เนื่องจากเรากำลังใช้ใบรับรองการลงนามด้วยตนเอง ตัวอย่างของฉันฉันไปที่ www.google.com โดยใช้ Chrome ดังนั้นฉันจึงสามารถคว้าใบรับรองได้

ใน Chrome ไปที่ตรวจสอบ -> ความปลอดภัย -> ดูใบรับรอง คุณจะเห็นใบรับรองทั้งหมดที่อนุญาตการเชื่อมต่อ SSL สังเกตว่าใบรับรองเหล่านี้ลงชื่อด้วยตนเองอย่างไร ส่วนที่พร่ามัวคือ บริษัท ของฉันและเราไม่ได้เป็นผู้มีอำนาจ คุณสามารถส่งออกเส้นทางใบรับรองแบบเต็มเป็นไฟล์ P7B หรือคุณสามารถส่งออกใบรับรองแต่ละรายการเป็นไฟล์ CER (การเข้ารหัส base64) การส่งออกเส้นทางแบบเต็มเนื่องจาก P7B ทำคุณได้ไม่ดีนักเพราะคุณจะต้องเปิดไฟล์นี้ในตัวจัดการใบรับรองและส่งออกเป็นไฟล์ CER แยกต่างหาก ใน Windows การคลิกสองครั้งที่ไฟล์ P7B จะเป็นการเปิดแอปพลิเคชันตัวจัดการใบรับรอง

ป้อนคำอธิบายรูปภาพที่นี่

การส่งออกเป็น CER (ฐาน 64) เป็นไฟล์ข้อความในรูปแบบต่อไปนี้:

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

ในการสร้างไฟล์ PEM ของเราเราเพียงแค่ต้องวางใบรับรองเหล่านี้ไว้ด้านบนของไฟล์อื่น ๆ ให้เป็นไฟล์เดียวและเปลี่ยนนามสกุลเป็น. pem ฉันใช้ Notepad เพื่อทำสิ่งนี้

คุณกองซ้อนใบรับรองในลำดับย้อนกลับจากเส้นทางใบรับรอง ดังนั้นข้างบนฉันจะเริ่มต้นด้วย * .google.com จากนั้นวาง Websense ด้านล่างจากนั้นออก CA 1 เป็นต้นวิธีนี้ใบรับรองจะถูกแยกวิเคราะห์จากบนลงล่างเพื่อค้นหา Root CA ที่เหมาะสม เพียงรวมถึง Root CA จะไม่ทำงาน แต่เราไม่จำเป็นต้องรวมใบรับรองทั้งหมด จากเส้นทางด้านบนฉันจะต้องรวมใบรับรองเหล่านั้นที่มาก่อนใบรับรอง Websense (การออก CA 1, CA นโยบาย, รูต CA)

เมื่อ certs ที่ลงชื่อด้วยตนเองเหล่านี้ถูกบันทึกลงในไฟล์ PEM เราก็พร้อมที่จะแนะนำ npm ให้ใช้ใบรับรองเหล่านี้เป็น CA ที่เชื่อถือได้ของเรา เพียงแค่ตั้งค่าไฟล์กำหนดค่าและคุณควรจะไป:

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

ขณะนี้ด้วยชุดพร็อกซีของคุณ (http และ https) และรีจิสทรีที่ตั้งไว้https://registry.npmjs.orgคุณควรจะสามารถติดตั้งแพคเกจหลังไฟร์วอลล์ขององค์กรด้วยใบรับรองที่ลงนามเองโดยไม่ต้องทำการstrict-sslตั้งค่า


6

คุณสามารถตรวจสอบพู้ทำเล่นถ้า NPM ให้ข้อผิดพลาดการตรวจสอบสิทธิ์ ติดตั้งและกำหนดค่าได้ง่าย ตั้งค่า Fiddler Rule เป็น Authenticated อัตโนมัติใน. npmrc ตั้งค่าคุณสมบัติเหล่านี้

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

มันใช้งานได้สำหรับฉัน :)


น่าแปลกใจที่ไม่มีการกำหนดค่าที่ฉันใช้สำหรับการทำงานของพร็อกซีของฉันฉันใช้สิ่งนี้และพู้ทำเล่นที่เปิดและฉันสามารถใช้มันได้ดี ...
Roberto

5

ลองนี้ตั้งค่าพร็อกซีใน npm ดังนี้

npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

4

คุณจะได้รับพรอกซีโฮสต์และพอร์ตจากผู้ดูแลเซิร์ฟเวอร์หรือฝ่ายสนับสนุนของคุณ

หลังจากนั้นก็ตั้งค่า

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

หากมีอักขระพิเศษในรหัสผ่านให้ลองด้วย% urlencode เช่น: - ปอนด์ (แฮ)) shuold จะถูกแทนที่ด้วย% 23

สิ่งนี้ใช้ได้กับฉัน ...


3

เพียงแค่สร้างไฟล์ชื่อ. npmrc ในโฟลเดอร์โครงการของคุณมันจะหลีกเลี่ยงการตั้งค่าพร็อกซีในระดับระบบ

#Without password
proxy=http://ipaddress:80
https-proxy=http://ipaddress:80

#With password
proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

แสดงความคิดเห็นเช่นนี้หากคุณไม่ได้ใช้พรอกซี

#proxy=http://ipaddress:80
#https-proxy=http://ipaddress:80

#With password
#proxy=http://<username>:<pass>@proxyhost:<port>
#https-proxy=http://<uname>:<pass>@proxyhost:<port>

3

ไม่มีคำตอบที่มีอยู่อธิบายวิธีใช้ npm กับไฟล์ PAC บางคนแนะนำให้ดาวน์โหลดไฟล์ PAC ตรวจสอบด้วยตนเองและเลือกหนึ่งในสตริง "PROXY ... " แต่วิธีนี้จะไม่ทำงานหากไฟล์ PAC จำเป็นต้องเลือกจากหลายผู้รับมอบฉันทะหรือหากไฟล์ PAC มีตรรกะที่ซับซ้อนเพื่อเลี่ยงผ่านพร็อกซีสำหรับ URL ที่แน่นอน

นอกจากนี้พร็อกซีขององค์กรบางแห่งต้องการการรับรองความถูกต้องของ NTLM CNTLM สามารถจัดการการรับรองความถูกต้อง แต่ไม่รองรับไฟล์ PAC

อีกทางเลือกหนึ่งคือการใช้Alpacaซึ่งดำเนินการไฟล์ PAC ใน JavaScript VM และทำการตรวจสอบความถูกต้อง NTLM ด้วยพร็อกซีผลลัพธ์


2

หากคุณอยู่เบื้องหลังเครือข่ายองค์กรที่มีพร็อกซีฉันเพิ่งใช้เครื่องมือพร็อกซี ntlm และใช้พอร์ตและพร็อกซีที่จัดทำโดย ntlm สำหรับ instnce ฉันใช้การกำหนดค่านี้:

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

ฉันหวังว่านี่จะช่วยได้.


2

ใช้คำสั่งด้านล่างที่ cmd หรือ GIT Bash หรือพรอมต์อื่น ๆ

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

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

โดยที่ 192.168.1.101 คือ proxy ip และ 4128 คือพอร์ต เปลี่ยนตามการตั้งค่าพร็อกซีของคุณ




1

ลองสิ่งนี้มันเป็นสิ่งเดียวที่ทำงานได้สำหรับฉัน:

npm --proxy http: //: @proxyhost: - http http // //: //proxyhost พรอกซี @: - ติดตั้ง -slsl เท็จแพ็คเกจ -g

ใส่ใจกับตัวเลือก --strict-ssl false

โชคดี.


1

NPMการตั้งค่าพร็อกซีที่ระบุไว้ในคำตอบที่ได้รับการยอมรับในการแก้ปัญหา แต่อย่างที่คุณเห็นในนี้ปัญหา NPMอ้างอิงบางส่วนใช้ GIT และที่ทำให้การตั้งค่าพร็อกซีคอมไพล์ที่จำเป็นและสามารถทำได้ดังนี้

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

การตั้งค่าพร็อกซี NPM ที่กล่าวถึง:

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

0

ฉันมีปัญหาที่คล้ายกันและฉันพยายามแก้ไขปัญหาทั้งหมดข้างต้น แต่ไม่มีใครทำงานให้ฉันได้ (ฉันใช้อักขระพิเศษ (เช่นสัญลักษณ์ '@') ในรหัสผ่านของฉันและฉันต้องเพิ่มชื่อโดเมนด้วย)

นอกจากนั้นฉันยังมีความกังวลเล็กน้อยในการเพิ่มรหัสผ่านของฉันเป็นข้อความธรรมดา มันกลับกลายเป็นทางออกที่ง่ายที่สุดในการเอาชนะความท้าทายเหล่านี้คือการใช้ reverse proxy บางประเภท (เช่น Fiddler)

ฉันมีรายละเอียดขั้นตอนการตั้งค่าในคำตอบนี้ใน SO แล้ว


0

การเพิ่มบรรทัดด้านล่างในไฟล์ .typingsrc ช่วยฉันได้

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

0

ฉันพบปัญหาที่คล้ายกันและพบว่าไฟล์กำหนดค่า npm (.npmrc) ของฉันมีรายการรีจิสตรีผิด แสดงความคิดเห็นมันและติดตั้งอีกครั้ง มันทำงานได้


0

OS: Windows 7

ขั้นตอนที่เหมาะกับฉัน:

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

  3. ความคิดเห็น: ฉันใช้คำสั่งนี้เพื่อทราบการตั้งค่าพร็อกซีของฉัน
    npm config rm proxy

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

0

เพราะฉันยังคงมีปัญหาเกี่ยวกับการตั้งค่าการตั้งค่าพร็อกซี่ในการทำงานและการปิดที่บ้านผมได้เขียนบทและเผยแพร่npm-corpo-proxy.sh ในทุก corpo รหัสผ่านจะต้องมีการเปลี่ยนแปลงบ่อยครั้งและจะต้องมีตัวอักษรพิเศษซึ่งจะต้องเข้ารหัสก่อนที่จะให้อาหารการกำหนดค่า npm (เช่นเดียวกันสำหรับโดเมนแบบฟอร์ม backash \ user)


0

จากการค้นหาเพียงเล็กน้อยบน google สิ่งแรกที่ฉันลองคือนี่

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

แต่ก็ยังคงดูเหมือนว่าจะหมดการเชื่อมต่อเมื่อพยายามที่จะติดตั้ง จากนั้นฉันก็รันบรรทัดนี้พร้อมรับคำสั่งและตอนนี้ฉันสามารถใช้การติดตั้ง npm

set NODE_TLS_REJECT_UNAUTHORIZED=0

0

ฉันไม่สามารถใช้งานกับ CNTLM ได้ ฉันลองติดตามข้อมูลทั้งหมดที่โพสต์ไว้ด้านบน แต่พร็อกซียังไม่อนุญาตการเชื่อมต่อ ด้วย Fiddler คุณเพียงแค่ติดตั้งและตรวจสอบตัวเลือกการรับรองความถูกต้องโดยอัตโนมัติ แต่ในการทำงานฉันต้องลบไฟล์. npmrc ออกจากโฟลเดอร์ผู้ใช้ของฉันและตั้งค่าตัวแปรสภาพแวดล้อมตามที่ระบุไว้ที่นี่ด้วยค่าเหล่านี้:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.