การติดตั้ง pip ล้มเหลวด้วย“ ข้อผิดพลาดในการเชื่อมต่อ: [SSL: CERTIFICATE_VERIFY_FAILED] การตรวจสอบใบรับรองล้มเหลว (_ssl.c: 598)”


397

ฉันยังใหม่กับ Python และพยายามใช้> pip install linkcheckerกับ Windows 7 หมายเหตุบางประการ:

  • การติดตั้ง pip ล้มเหลวไม่ว่าในแพ็คเกจใด ตัวอย่างเช่น> pip install scrapyส่งผลให้เกิดข้อผิดพลาด SSL
  • การติดตั้งวานิลลาของ Python 3.4.1 รวม pip 1.5.6 สิ่งแรกที่ฉันพยายามทำคือติดตั้ง linkchecker Python 2.7 ได้รับการติดตั้งแล้วมันมาพร้อมกับ ArcGIS pythonและpipไม่สามารถใช้งานได้จากบรรทัดคำสั่งจนกว่าฉันจะติดตั้ง 3.4.1
  • > pip search linkcheckerโรงงาน อาจเป็นเพราะการค้นหา pip ไม่ได้ตรวจสอบใบรับรอง SSL ของเว็บไซต์
  • ฉันอยู่ในเครือข่าย บริษัท แต่เราไม่ผ่านพร็อกซีเพื่อเข้าถึงอินเทอร์เน็ต
  • คอมพิวเตอร์ของ บริษัท แต่ละคน (รวมทั้งเหมือง) มี Trusted ใบรับรองรากที่ใช้สำหรับเหตุผลต่าง ๆ รวมทั้งช่วยให้การตรวจสอบการจราจร TLS เพื่อhttps://google.com ไม่แน่ใจว่ามีอะไรเกี่ยวข้องหรือไม่

นี่คือเนื้อหาของpip.logของฉันหลังจากทำงานpip install linkchecker:

Downloading/unpacking linkchecker
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Getting page https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/: connection error: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/ (Caused by <class 'http.client.CannotSendRequest'>: Request-sent)
  Will skip URL https://pypi.python.org/simple/ when looking for download links for linkchecker
  Cannot fetch index base URL https://pypi.python.org/simple/
  URLs to search for versions for linkchecker:
  * https://pypi.python.org/simple/linkchecker/
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Could not find any downloads that satisfy the requirement linkchecker
Cleaning up...
  Removing temporary dir C:\Users\jcook\AppData\Local\Temp\pip_build_jcook...
No distributions at all found for linkchecker
Exception information:
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "C:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "C:\Python34\lib\site-packages\pip\req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "C:\Python34\lib\site-packages\pip\index.py", line 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
pip.exceptions.DistributionNotFound: No distributions at all found for linkchecker

1
ค่อนข้างตรงกันข้าม! Python 3.4.1 และรุ่นก่อนหน้าไม่ทำการตรวจสอบใบรับรองโดยค่าเริ่มต้น ถ้าคุณใช้ Python 3.4.2 ฉันคงคิดว่านั่นเป็นปัญหา (ดูที่ปัญหา 21013และเธรดนี้ในรายการส่งเมลโปรดสังเกตว่านั่นคือจุดเริ่มต้นของเธรดที่ค่อนข้างยาว) ขออภัยฉันไม่สามารถช่วยได้จริง!
Cody Piersall

3
ตรวจสอบว่าคุณเปิดเล่นซอร์เดอร์แล้วปิดหรือไม่ พู้ทำเล่นลองแบ่ง SSL และจุดแบ่งช่วงเวลานี้เมื่อฉันปิดจุดเล่นพิพากษาทำงานให้ฉัน เมื่อฉันปิดไวโอลินของฉันทุกอย่างก็โอเค
José Barbosa

คำตอบ:


639

-----> pip install gensim config --global http.sslVerify เท็จ

เพียงติดตั้งแพ็คเกจใด ๆ ด้วยคำสั่ง "config --global http.sslVerify false"

คุณสามารถละเว้นข้อผิดพลาด SSL ได้โดยการตั้งค่าpypi.orgและfiles.pythonhosted.orgเป็นโฮสต์ที่เชื่อถือได้

$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name>

หมายเหตุ : บางครั้งในช่วงเมษายน 2018 ที่แพคเกจดัชนีหลามถูกอพยพมาจากการpypi.python.org pypi.orgซึ่งหมายความว่าคำสั่ง "เชื่อถือได้โฮสต์" โดยใช้โดเมนเก่าไม่ทำงานอีกต่อไป

แก้ไขถาวร

ตั้งแต่การเปิดตัว pip 10.0 คุณจะสามารถแก้ไขปัญหานี้ได้อย่างถาวรเพียงแค่อัพเกรดpipตัวเอง:

$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org pip setuptools

หรือเพียงแค่ติดตั้งใหม่เพื่อรับรุ่นล่าสุด:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

(…แล้วทำงานget-pip.pyด้วยล่าม Python ที่เกี่ยวข้อง)

pip install <otherpackage>ควรทำงานหลังจากนี้ ถ้าไม่เช่นนั้นคุณจะต้องทำมากขึ้นตามที่อธิบายไว้ด้านล่าง


คุณอาจต้องการเพิ่มโฮสต์และพร็อกซีที่เชื่อถือได้ในไฟล์ปรับแต่งของคุณ

pip.ini(Windows) หรือpip.conf(unix)

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org

โซลูชันสำรอง (ปลอดภัยน้อยกว่า)

คำตอบส่วนใหญ่อาจก่อให้เกิดปัญหาด้านความปลอดภัย

วิธีแก้ปัญหาสองประการที่ช่วยในการติดตั้งแพคเกจหลามส่วนใหญ่ได้อย่างง่ายดาย:

  • ใช้ easy_install : easy_install <package_name>ถ้าคุณขี้เกียจจริงๆและไม่ต้องการที่จะเสียเวลามากการใช้งาน โปรดทราบว่าจะไม่พบแพ็คเกจบางรายการหรือจะให้ข้อผิดพลาดเล็กน้อย
  • การใช้วงล้อ : ดาวน์โหลดวงล้อของแพ็คเกจงูใหญ่และใช้คำสั่ง pip pip install wheel_package_name.whlเพื่อติดตั้งแพคเกจ

7
การอัปเดตของคุณทำให้ฉันได้รับสิ่งต่าง ๆ ในกรณีของฉันไฟร์วอลล์องค์กรแทรกตัวเองเป็นโฮสต์ที่เชื่อถือได้สำหรับการเชื่อมต่อ SSL ฉันคิดว่าการตั้งค่าพร็อกซีผิด แต่การเพิ่ม verbose แสดงให้เห็นว่าปัญหาคือ SSL การเปลี่ยนแปลงดัชนี URL แก้ไขปัญหา
peater

11
เยี่ยมมากขอบคุณ! ดูเหมือนว่าโฮสต์ที่น่าเชื่อถือนั้นเพียงพอแล้ว pip install --trusted-host pypi.python.org pypi_package. การใช้--verboseแสดงให้เห็นว่าไม่มี--trusted-hostการเชื่อมต่อ HTTPS จะล้มเหลวในขณะที่พยายามเชื่อมต่อ HTTPS เดียวกัน (ไม่ใช่ HTTP) ด้วย--trusted-hostแต่ทำได้สำเร็จ
Oliver

12
การไม่ใช้เวอร์ชัน HTTP (และจากนั้นให้ไว้ใจได้) ยังมีความเสี่ยงด้านความปลอดภัยหรือไม่
Paŭlo Ebermann

3
คุณสามารถทำให้มันสั้นที่จะไม่สนใจพารามิเตอร์ - ดัชนี -exl ลองคำสั่งนี้ก็ควรจะเป็น:pip install --trusted-host pypi.python.org pythonPackage
Alter Hu

8
มันไม่ทำงานสำหรับฉัน การเรียกใช้เซียร์รา mac os สูงบน macbookpro 15 "Python 2.7 pip 9.0.1 ฉันลองทั้งคู่: sudo -H pip install --trusted-host pypi.python.org numpy และ sudo pip pip --trusted-host pypi.python.org numpy ทำให้ฉันมีข้อผิดพลาดเดียวกันเสมอ: "มีปัญหาในการยืนยันใบรับรอง SSL: [SSL: TLSV1_ALERT_PROTOCOL_VERSION SSL] รุ่นโปรโตคอลการแจ้งเตือน tlsv1 (_ssl.c: 661) - การข้ามไม่พบรุ่นที่ตรงตามข้อกำหนด"
DaniPaniz

123

คุณสามารถระบุใบรับรองด้วยพารามิเตอร์นี้:

pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker

ดู: เอกสาร»คู่มืออ้างอิง» pip

หากการระบุใบรับรองหลักของ บริษัท ของคุณไม่สามารถใช้งานได้ cURL อาจใช้ได้: http://curl.haxx.se/ca/cacert.pem

คุณต้องใช้ไฟล์ PEM ไม่ใช่ไฟล์ CRT หากคุณมีไฟล์ CRT คุณจะต้องแปลงไฟล์เป็น PEMมีรายงานในความคิดเห็นว่าตอนนี้ใช้ได้กับไฟล์ CRT แต่ฉันยังไม่ได้ตรวจสอบ

นอกจากนี้ยังตรวจสอบ: SSL Cert ตรวจสอบ


1
Curl one นั้นปลอดภัย ฉันขอแนะนำให้ใช้สิ่งนั้น
Steve Tauber

1
@ JeremyCook อาจเป็นเวลาบนเซิร์ฟเวอร์ของคุณหากในอดีตอาจเป็นกระบวนการยืนยัน
Giovanni Bitliner

1
ไม่รองรับรูปแบบ CRT เฉพาะรูปแบบ PEM เท่านั้น คุณจะต้องแปลง CRT เป็นรูปแบบ PEM โดยใช้ openssl คุณควรตรวจสอบว่าบันเดิลที่คุณดาวน์โหลดมีรูต CA ที่ถูกต้อง โปรดดูคำตอบของฉันข้างต้นสำหรับรายละเอียด: stackoverflow.com/a/28724886/41957
chnrxn

1
@JeremyCook, PEM / certs ไม่ได้มาจากบุคคลที่สามโดยตรงที่คุณดาวน์โหลดมา พวกเขารวบรวม certs จากแหล่งดั้งเดิม บุคคลที่สามไม่สามารถสร้างใบรับรองของบุคคลอื่นได้เว้นแต่จะมีรหัสที่ถูกต้อง (ซึ่งจะมีเพียงบุคคลอื่นเท่านั้น)
chnrxn

4
@endolith - ดูที่pip.pypa.io/en/stable/user_guide/#configurationดูเหมือนว่าคุณสามารถใช้ตัวแปรสภาพแวดล้อมหรือpip.confไฟล์ที่จะอ้างอิงอย่างถาวรโดยไม่ต้องระบุคำสั่ง
Cinderhaze

63

คำตอบของ kenorbมีประโยชน์มาก (และยอดเยี่ยม!)
ในบรรดาวิธีแก้ปัญหาของเขาอาจเป็นวิธีที่ง่ายที่สุด: --trusted-host

ตัวอย่างเช่นในกรณีนี้คุณสามารถทำได้

pip install --trusted-host pypi.python.org linkchecker

ไฟล์ pem (หรืออย่างอื่น) ไม่จำเป็น


นอกจากนี้ยังใช้งานได้กับคำสั่งอื่นเช่นpip list --trusted-host pypi.python.org --outdated
Igor

61

สำหรับฉันปัญหาได้รับการแก้ไขโดยการสร้างโฟลเดอร์ pipด้วยไฟล์: pip.ini ใน C:\Users\<username>\AppData\Roaming\ เช่น:

C:\Users\<username>\AppData\Roaming\pip\pip.ini

ข้างในฉันเขียนว่า:

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org

ฉันรีสตาร์ทหลามจากนั้นให้ pip เชื่อถือเว็บไซต์เหล่านี้อย่างถาวรและใช้เพื่อดาวน์โหลดแพ็คเกจจาก

หากคุณไม่พบโฟลเดอร์ AppData บน windows ให้เขียน%appdata%ใน file explorer และควรปรากฏขึ้น


น่าแปลกที่นี่ไม่ได้ช่วยในเครื่อง Win10 ของฉัน: /
mcandre

1
ที่ทำงานสภาพแวดล้อม Windows 10 ใช้ตัวจำลองคอนโซล Cmder - เชื่อถือโฮสต์ใช้เพื่อแก้ไขปัญหา "" SSLError (SSLCertVerificationError (1, '[SSL: CERTIFICATE_VERIFY_FAILED] การตรวจสอบใบรับรองล้มเหลว: ใบรับรองที่ลงชื่อด้วยตนเองในห่วงโซ่ใบรับรอง "วันนี้มันหยุดทำงานฉันวางสำเนาของโฟลเดอร์ pip ของฉัน ( นำมาจาก ../AppData/Local/) ใน ../AppData/Roaming/ และทุกอย่างถูกต้องกับโลกหลามท้องถิ่นของฉันอีกครั้งขอบคุณมาก!
IdusOrtus

1
ที่ดี! ขอบคุณมาก. - ไว้วางใจโฮสต์ไม่ทำงานสำหรับฉันตอนนี้ แต่โซลูชันของคุณช่วย
Alexander Prokofyev

1
เหตุใดจึงไม่ดาวน์โหลดนี้เมื่อติดตั้ง Python>
98Ed

! น่ากลัว ฉันกำลังค้นหาข้อผิดพลาดที่เกี่ยวข้องกับ GIT, พร็อกซีของ บริษัท , SSL และมันก็เกี่ยวข้องกับ pip ขอบคุณและฉันหวังว่าความคิดเห็นนี้จะทำให้ผู้คนสับสนเช่นฉัน
negas

41

คำตอบค่อนข้างคล้ายกันและสับสนเล็กน้อย ในกรณีของฉันใบรับรองในเครือข่าย บริษัท ของฉันเป็นปัญหา ฉันสามารถแก้ไขปัญหาโดยใช้:

pip install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org oauthlib -vvv

เท่าที่เห็นนี่ อาร์กิวเมนต์ -vvv สามารถละเว้นได้หากไม่ต้องการเอาต์พุต verbose


10
เพียงคนเดียวที่จะแก้ไขปัญหาของฉันขอบคุณ
Gringo Suave

เยี่ยมมากคนเดียวที่ทำงานให้ฉันด้วย!
ethikz

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

มันก็ใช้ได้กับฉันเช่นกัน ด้านบนไม่ทำงาน
Srinath Ganesh

32

แก้ไขถาวร

pip install --upgrade pip --trusted-host pypi.org --trusted-host files.pythonhosted.org

สำหรับเช่น:

pip install <package name> --trusted-host pypi.org --trusted-host files.pythonhosted.org

24

เพื่อแก้ไขปัญหานี้ทุกครั้งคุณสามารถยืนยันว่าคุณมีpip.confไฟล์

นี่คือที่ที่คุณpip.confควรจะเป็นไปตามเอกสาร :

บน Unix ไฟล์กำหนดค่าเริ่มต้นคือ: $HOME/.config/pip/pip.confซึ่งคำนึงถึงตัวแปรสภาพแวดล้อม XDG_CONFIG_HOME

บน macOS ไฟล์คอนฟิกูเรชันคือ$HOME/Library/Application Support/pip/pip.confถ้า$HOME/Library/Application Support/pipมีไดเร็กทอรีอื่นอยู่$HOME/.config/pip/pip.conf

บน Windows %APPDATA%\pip\pip.iniแฟ้มการกำหนดค่าเป็น

ภายใน virtualenv:

บน Unix และ macOS ไฟล์คือ $VIRTUAL_ENV/pip.conf

บน Windows ไฟล์คือ: %VIRTUAL_ENV%\pip.ini

คุณpip.confควรมีลักษณะดังนี้:

[global]
trusted-host = pypi.python.org

pip install linkcheckerติดตั้งlinkcheckerโดยไม่ต้องบ่นหลังจากที่ฉันสร้างpip.confไฟล์


1
$ HOME / Library / Application Support / pip ไม่มีอยู่ในเครื่องของฉันมีตำแหน่งอื่นหรือไม่?
42shadow42

ดูเหมือนว่าคู่มือpipผู้ใช้ได้รับการปรับปรุงตั้งแต่เมื่อฉันโพสต์คำตอบนี้ ฉันอัปเดตคำตอบสำหรับ macOS แล้ว มันช่วยได้ไหม
Alex-Antoine Fortin

ไม่ส่งผลต่อข้อผิดพลาด SSL ในเครื่อง Win10 ของฉัน: /
mcandre

ไม่สามารถแก้ไขปัญหาใน MacOSX
MoDJ

ฉันใช้ macOS หากคุณติดตั้ง python3 ใช้brewแล้วให้แน่ใจว่าคุณกำลังใช้pip3และสร้างเป็นpip.conf $HOME/.config/pip/pip.confฉันทำงานให้ฉัน
anu

23

วิธีที่ตรงไปตรงมาที่สุดที่ฉันพบคือการดาวน์โหลดและใช้ "DigiCert High Assurance EV Root CA" จาก DigiCert ที่https://www.digicert.com/digicert-root-certificates.htm#roots

คุณสามารถเยี่ยมชมhttps://pypi.python.org/เพื่อตรวจสอบผู้ออกใบรับรองโดยคลิกที่ไอคอนล็อคในแถบที่อยู่หรือเพิ่มเครดิตโดยการเปิด openssl:

$ openssl s_client -connect pypi.python.org:443
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=3359300/street=16 Allen Rd/postalCode=03894-4801/C=US/ST=NH/L=Wolfeboro,/O=Python Software Foundation/CN=www.python.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA

ค่า CN สุดท้ายในห่วงโซ่ใบรับรองคือชื่อของ CA ที่คุณต้องการดาวน์โหลด

สำหรับความพยายามครั้งเดียวทำต่อไปนี้:

  1. ดาวน์โหลดCRTจาก DigiCert
  2. แปลง CRT เป็นรูปแบบ PEM
  3. ส่งออกตัวแปรสภาพแวดล้อม PIP_CERT ไปยังเส้นทางของไฟล์ PEM

(บรรทัดสุดท้ายถือว่าคุณกำลังใช้เปลือก bash) ก่อนเรียกใช้ pip

curl -sO http://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt 
openssl x509 -inform DES -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -text
export PIP_CERT=`pwd`/DigiCertHighAssuranceEVRootCA.pem

ในการทำให้สิ่งนี้กลับมาใช้งานได้ให้ใส่ DigiCertHighAssuranceEVRootCA.crt ที่ใดที่หนึ่งที่พบได้ทั่วไปและส่งออก PIP_CERT ตามนั้นใน ~ / .bashrc ของคุณ


4
ใช้คำตอบของคุณเพื่อส่งออก root CA ของ บริษัท ของเราไปยังตัวแปร PIP_CERT และในที่สุดหลังจากลองทุกอย่างอื่นรวมถึง 'pip --cert cert.pem' ในแบบที่คุณใช้ ... เพียงแค่ติดตั้งแพ็คเกจ pip บิ๊ก +1 - ใช่เรามี firewal / proxy / utm
Marlon

สิ่งนี้ยังคงล้มเหลวสำหรับฉันใน Mac Mojave ฉันทำตามขั้นตอน 3 ขั้นและยังได้รับ "ข้อผิดพลาด: pip ถูกกำหนดค่าด้วยตำแหน่งที่ตั้งที่ต้องใช้ TLS / SSL แต่โมดูล ssl ใน Python ไม่พร้อมใช้งาน" ฉันลอง --trusted-host และ - ใบรับรองตัวเลือกและ pip ​​จะไม่ทำงาน ฉันพยายามอัพเกรด pip และได้รับข้อผิดพลาด SSL ฉันติดตั้ง pip ตั้งแต่เริ่มต้นด้วยการม้วนงอและยังคงได้รับข้อผิดพลาดเมื่อเรียกใช้ pip ใช้เวลาในการขุดคูและติดกับ conda :(
user1255933

21

คุณมีความเป็นไปได้ที่จะแก้ปัญหาด้วยCERTIFICATE_VERIFY_FAILED:

  • ใช้ HTTP แทน HTTPS (เช่น--index-url=http://pypi.python.org/simple/)
  • ใช้--cert <trusted.pem>หรือCA_BUNDLEตัวแปรเพื่อระบุบันเดิล CA อื่น

    เช่นคุณสามารถไปที่ URL ล้มเหลวจากเว็บเบราว์เซอร์และนำเข้าใบรับรองหลักในระบบของคุณ

  • เรียกใช้python -c "import ssl; print(ssl.get_default_verify_paths())"เพื่อตรวจสอบปัจจุบัน (ตรวจสอบถ้ามี)

  • OpenSSL มีคู่ของสภาพแวดล้อม (กSSL_CERT_DIR, SSL_CERT_FILE) ซึ่งสามารถนำมาใช้เพื่อระบุฐานข้อมูลที่แตกต่างกันใบรับรองPEP-476
  • ใช้--trusted-host <hostname>เพื่อทำเครื่องหมายโฮสต์ว่าเชื่อถือได้
  • ใน Python ใช้verify=Falseเพื่อrequests.get(ดู: การตรวจสอบความถูกต้องใบรับรอง SSL )
  • ใช้--proxy <proxy>เพื่อหลีกเลี่ยงการตรวจสอบใบรับรอง

อ่านเพิ่มเติมได้ที่: TLS / SSL เสื้อคลุมสำหรับวัตถุซ็อกเก็ต - ใบรับรองการตรวจสอบ


จากจุดแรกของคุณฉันจะระบุ HTTP ด้วยคำสั่ง pip ได้อย่างไร
rayzinnz

1
@rayzinnz ฉันได้เพิ่มตัวอย่าง
kenorb

16

ตั้งเวลาและวันที่ให้ถูกต้อง!

สำหรับฉันมันออกมาว่าวันที่และเวลาของฉันได้รับการกำหนดค่าผิดพลาดใน Raspberry Pi ผลลัพธ์คือการเชื่อมต่อ SSL และ HTTPS ทั้งหมดล้มเหลวโดยใช้https://files.pythonhosted.org/เซิร์ฟเวอร์

อัปเดตแบบนี้:

sudo date -s "Wed Thu  23 11:12:00 GMT+1 2018"
sudo dpkg-reconfigure tzdata

หรือโดยตรงกับเวลาของ Google เช่น:

Ref .: https://superuser.com/a/635024/935136

sudo date -s "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"
sudo dpkg-reconfigure tzdata

เคยทำให้ฉันคลั่งไคล้หลายชั่วโมง - ขอบคุณสำหรับสิ่งนั้น เวลา PI ถูกปิดภายใน 10 วันสำหรับฉันทำให้เกิดข้อผิดพลาดทุกประเภทระหว่างการติดตั้งจุดเล็ก ๆ
SteveJ

13

ฉันเพิ่งพบปัญหานี้เนื่องจากตัวกรองเนื้อหาเว็บของ บริษัท ที่ใช้ Certificate Authority ของตัวเองเพื่อให้สามารถกรองปริมาณการใช้งาน SSL PIP ดูเหมือนจะไม่ใช้ใบรับรอง CA ของระบบในกรณีของฉันทำให้เกิดข้อผิดพลาดที่คุณพูดถึง การลดระดับ PIP ไปเป็นรุ่น 1.2.1 นำเสนอปัญหาชุดของตัวเองในภายหลังดังนั้นฉันจึงกลับไปใช้เวอร์ชันเดิมที่มาพร้อมกับ Python 3.4

วิธีแก้ปัญหาของฉันคือค่อนข้างง่าย: easy_installการใช้งาน ไม่ได้ตรวจสอบ certs (เช่น PIP เวอร์ชั่นเก่า) หรือรู้ว่าจะใช้ certs ระบบเพราะมันใช้งานได้ทุกครั้งสำหรับฉันและฉันยังสามารถใช้ PIP เพื่อถอนการติดตั้งแพ็คเกจที่ติดตั้ง easy_install

หากวิธีนี้ใช้ไม่ได้ผลและคุณสามารถเข้าถึงเครือข่ายหรือคอมพิวเตอร์ที่ไม่มีปัญหาคุณสามารถตั้งค่าเซิร์ฟเวอร์ PyPI ส่วนตัวของคุณเองได้ตลอดเวลา: วิธีสร้างดัชนีพื้นที่เก็บข้อมูล pypi ภายในเครื่องโดยไม่มีมิเรอร์?

ฉันเกือบทำอย่างนั้นจนกว่าฉันจะพยายามใช้easy_installเป็นความพยายามครั้งสุดท้าย


ปัญหาเดียวกันที่นี่ วิธีแก้ปัญหาก็คือการส่งออกใบรับรองรากของ บริษัท ที่เป็นไฟล์และบอกจะใช้กับpip --cert MyCompanyRootCA.crt
glibdud

10

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

pip install --index-url=http://pypi.python.org/simple/ linkchecker

1
ฉันคาดว่าคำแนะนำของคุณจะทำงาน อย่างบ้าคลั่งฉันได้รับข้อผิดพลาดเดียวกันรวมถึงข้อผิดพลาดแรกCould not fetch URL http://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
Jeremy Cook

3
ตกลงดังนั้นวิธีแก้ปัญหาอื่นคือการดาวน์โหลดแพ็คเกจ tar.gz ที่นี่pypi.python.org/pypi/LinkChecker/9.3และการติดตั้งด้วย: pip install LinkChecker-9.3.tar.gz
Augusto Destrero

3
แต่ถ้าแพ็กเกจที่คุณต้องการติดตั้งมีการขึ้นต่อกันคุณต้องดาวน์โหลดและติดตั้งการพึ่งพาทั้งหมดหากแพ็กเกจเหล่านี้มีจำนวนมากอาจกลายเป็นฝันร้าย
Augusto Destrero

1
สำหรับฉันฉันต้องดาวน์โหลด whl (สำหรับกรณี pyserial ของฉัน) และติดตั้ง สิ่งนี้ทำให้การอ้างอิงที่ไม่ได้รวบรวมโดย tar.gz ... ดังนั้นบางที whl อาจเป็นตัวเลือกอื่นในบรรทัดของ @baxeico python -m pip ติดตั้ง pyserial-3.4-py2.py3-none-any.whl สำหรับฉัน สิ่งนี้ไม่ได้ผล: 1. - cert cacert.pem 2. ส่งออกใบรับรอง บริษัท , แปลงเป็น PEM 3. easy_install ใน cygwin 4. - เชื่อถือโฮสต์
charo

1
การทำงานที่ยาวนานในปี 2017 - การเข้าถึง HTTP ถูกตัดออกไปอย่างสมบูรณ์ mail.python.org/pipermail/distutils-sig/2017- ตุลาคม /
gbtimmon

8

คำตอบที่จะใช้

pip install --trusted-host pypi.python.org <package>

งาน. แต่คุณจะต้องตรวจสอบว่ามีการเปลี่ยนเส้นทางหรือแคชpipถูกกดปุ่มหรือไม่ ใน Windows 7 ด้วยpip 9.0.1ฉันต้องทำงาน

pip install \
  --trusted-host pypi.python.org \
  --trusted-host pypi.org \
  --trusted-host files.pythonhosted.org \
  <package>

คุณสามารถค้นหาสิ่งเหล่านี้ด้วยธง verbose


7

ฉันติดตั้ง pip 1.2.1 พร้อม easy_install และอัพเกรดเป็น pip รุ่นล่าสุด (6.0.7 ในเวลานั้น) ซึ่งสามารถติดตั้งแพ็คเกจในเคสของฉันได้

easy_install pip==1.2.1
pip install --upgrade pip

7

คุณมี 4 ตัวเลือก:

การใช้ใบรับรองเป็นพารามิเตอร์

$ pip install --cert /path/to/mycertificate.crt linkchecker

การใช้ใบรับรองใน pip.conf

สร้างไฟล์นี้:

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

และเพิ่มบรรทัดเหล่านี้:

[global]
cert = /path/to/mycertificate.crt

ละเว้นใบรับรองและใช้ HTTP

$ pip install --trusted-host pypi.python.org linkchecker

ไม่สนใจใบรับรองและใช้ HTTP ใน pip.conf

สร้างไฟล์นี้:

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

และเพิ่มบรรทัดเหล่านี้:

[global]
trusted-host = pypi.python.org

แหล่ง


6

ก่อนอื่น

    pip install --trusted-host pypi.python.org <package name>

ไม่ได้ผลสำหรับฉัน ฉันได้รับข้อผิดพลาด CERTIFICATE_VERIFY_FAILED ต่อไป อย่างไรก็ตามฉันสังเกตเห็นในข้อความแสดงข้อผิดพลาดที่พวกเขาอ้างถึงเว็บไซต์ 'pypi.org' ดังนั้นฉันจึงใช้สิ่งนี้เป็นชื่อโฮสต์ที่เชื่อถือได้แทน pypi.python.org นั่นเกือบทำให้ฉันอยู่ที่นั่น โหลดยังคงล้มเหลวด้วย CERTIFICATE_VERIFY_FAILED แต่ในภายหลัง ค้นหาการอ้างอิงถึงเว็บไซต์ที่ล้มเหลวฉันรวมมันไว้ในโฮสต์ที่เชื่อถือได้ สิ่งที่ทำงานให้ฉันในที่สุดก็คือ:

    pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package name>

5

ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องหรือไม่ แต่ฉันมีปัญหาคล้ายกันซึ่งแก้ไขโดยการคัดลอกไฟล์เหล่านี้จาก Anaconda3 / Library / bin ไปยัง Anaconda3 / DLLs:

libcrypto-1_1-x64.dll

libssl-1_1-x64.dll


ด้วย Anaconda 2019.03 ฉันได้คัดลอกไฟล์ต่อไปนี้จาก <Anaconda3 โฟลเดอร์> / Library / bin ไปที่ <Anaconda3> / DLLs libcrypto-1_1-x64.dll libcrypto-1_1-x64.pdb libssh2.dll libssl-1_1-x64.dll libssl-1_1-x64.dll 1_1-x64.pdb จากนั้นฉันเพิ่มข้อผิดพลาด ConnectTimeout ดังนั้นการกำหนดค่าพร็อกซีที่ได้รับการอัปเดตดังนั้น .condarc
MordicusEtCubitus

โรงงาน ผู้ชายที่คุณเป็นอัจฉริยะ! ฉันใช้งานโรมมิ่งฟอรัมประมาณ 1.5 ชั่วโมงเพื่อหาวิธีแก้ปัญหาที่ง่ายเกินไป
ivan866

4

พบปัญหาเดียวกันpip install ftputilกับการลองใช้ ActivePython 2.7.8, ActivePython 3.4.1 และ "stock" Python 3.4.2 บน Windows 7 Enterprise 64 บิต ความพยายามทั้งหมดล้มเหลวโดยมีข้อผิดพลาดเดียวกับ OP

แก้ไขปัญหาสำหรับ Python 3.4.2 โดยการลดระดับเป็น pip 1.2.1: easy_install pip==1.2.1(ดูhttps://stackoverflow.com/a/16370731/234235 ) การแก้ไขเดียวกันยังใช้งานได้กับ ActivePython 2.7.8

ข้อผิดพลาดรายงานในเดือนมีนาคม 2013 ยังคงเปิดอยู่: https://github.com/pypa/pip/issues/829


สิ่งนี้ใช้ได้สำหรับฉันเช่นกัน ในขณะที่อาจเป็นความคิดที่ไม่ดีในตอนแรกที่ปรับลดรุ่นเป็น pip รุ่นเก่า แต่ฉันจัดการกับแพ็คเกจ django แบบเก่าดังนั้นเวอร์ชัน pip เก่าจึงจับคู่กับแพ็คเกจอื่น ๆ
mknaf

ปัญหา 829 ถูกปิดแล้ว
Ortomala Lokni

3

ไม่มีอะไรในหน้านี้ทำงานให้ฉันจนกว่าฉันจะใช้ตัวเลือก --verbose เพื่อดูว่าต้องการไปที่ files.pythonhosted.org มากกว่า pypi.python.org:

pip install --trusted-host files.pythonhosted.org <package_name>

ดังนั้นตรวจสอบ URL ว่าล้มเหลวจริง ๆ ผ่านตัวเลือก --verbose


2

ฉันแก้ไขปัญหานี้ได้โดยการลบ pip ของฉันและติดตั้ง pip เก่ากว่า: https://pypi.python.org/pypi/pip/1.2.1


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง - จากรีวิว
apomene

@apomene OP ควรทำอย่างไรinclude the essential parts of the answer hereเนื่องจากเป็นลิงก์ไปยังไฟล์ไบนารี ...
โทมัส Ayoub

@ThomasAyoub ฉันเชื่อว่าคุณรู้อยู่แล้วว่าข้อความข้างต้นเป็นไปโดยอัตโนมัติจากดังนั้นเมื่อการตั้งค่าสถานะคำตอบเป็นลิงค์คำตอบเท่านั้น
26716

@apomene ที่ไม่ตอบคำถามของฉันฉันยังไม่เห็นว่า OP ควร / ควรเพิ่มอะไร?
โทมัส Ayoub

1
@ThomasAyoub เพื่ออธิบายเพิ่มเติมความคิดเห็นของฉัน (SO) บ่งบอกว่าคำถามนั้นสั้นและเชื่อมโยงเท่านั้นซึ่งหมายความว่าควรเป็นความคิดเห็นที่ดีกว่า ความตั้งใจของฉันไม่ได้ระบุอย่างชัดเจนว่า OP ควรเพิ่มรายละเอียดในการอัพเกรดลิงก์อีกครั้ง แต่ให้รายละเอียดว่าทำไมจึงตอบคำถามนี้
apomene

2

คุณสามารถลองทำสิ่งนี้เพื่อข้าม "https":

pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org  [your package..]

1
หากคุณยังมีปัญหาอื่น ๆ เกี่ยวกับเวอร์ชั่นของ pip คุณสามารถลองใช้งานได้ pip install --trusted-host pypi.python.org --upgrade pip –
Smaillns

2

ทางออกหนึ่ง ( สำหรับ Windows ) คือการสร้างไฟล์ที่เรียกว่าpip.iniใน%AppData%\pip\โฟลเดอร์(สร้างโฟลเดอร์หากไม่มีอยู่)และใส่รายละเอียดต่อไปนี้:

[global]
cert = C:/certs/python_root.pem
proxy = http://my_user@my_company.com:my_password@proxy_ip:proxy_port

... และจากนั้นเราสามารถรันคำสั่งการติดตั้ง:

pip3 install PyQt5

ตัวเลือกอื่นคือการติดตั้งแพคเกจโดยใช้อาร์กิวเมนต์สำหรับพร็อกซีและใบรับรอง ...

$ pip3 install --proxy http://my_user@my_company.com:my_password@proxy_ip:proxy_port \
   --cert C:/certs/python_root.pem PyQt5

ในการแปลง*.cerไฟล์ใบรับรองเป็น*.pemรูปแบบที่ต้องการให้ดำเนินการตามคำแนะนำต่อไปนี้:

$ openssl x509 -inform der -in python_root.cer -out python_root.pem

หวังว่านี่จะช่วยใครซักคน!


1
สำหรับระบบปฏิบัติการอื่นลองดูคำตอบของ Alex-Antoine Fortin
Dinei

ไม่ต้องการพรอกซีเพียงใบรับรอง ฉันวิ่ง; pip3.6 config set global.cert '/<path>/server.crt'
avatarofhope2

2

ในกรณีของฉันมันเป็นเพราะใบรับรอง SSL ถูกลงนามโดย CA ภายในของ บริษัท ของฉัน การใช้วิธีแก้ไขปัญหาเช่นpip --certไม่ได้ช่วย แต่แพคเกจต่อไปนี้ได้:

pip install pip_system_certs

ดู: https://pypi.org/project/pip-system-certs/

แพคเกจนี้จะแก้ไข pip และการร้องขอในขณะใช้งานจริงเพื่อใช้ใบรับรองจากที่เก็บข้อมูลระบบเริ่มต้น

สิ่งนี้จะอนุญาตให้ pip เพื่อตรวจสอบการเชื่อมต่อ tls / ssl ไปยังเซิร์ฟเวอร์ที่ใบรับรองของคุณเชื่อถือได้จากการติดตั้งระบบของคุณ


1
ดูเหมือนว่าจะต้องติดตั้ง pip_sysem_certs เพื่อให้ข้อผิดพลาด [SSL: CERTIFICATE_VERIFY_FAILED] เป็นโมฆะปัญหาคือพยายามติดตั้งมันมีข้อผิดพลาด [SSL: CERTIFICATE_VERIFY_FAILED] ...
athos

นี่อาจเป็นวิธีการแก้ปัญหาในบางเวลา แต่pip_system_certsสภาพแวดล้อม Python ของฉันสมบูรณ์และด้วยเหตุนี้จึงไม่ใช่คำตอบที่ดี ห้ามติดตั้ง pip_system_certs ดูstackoverflow.com/questions/27835619/…สำหรับข้อมูลเพิ่มเติม
h0r53

1

สำหรับฉันนี้เป็นเพราะก่อนหน้านี้ฉันกำลังเรียกใช้สคริปต์ซึ่งตั้งค่าพร็อกซี (เป็นพู้ทำเล่น) เปิดคอนโซลหรือรีบูตเพื่อแก้ไขปัญหา


พู้ทำเล่นสามารถข้ามได้โดยการตั้งค่า "ถอดรหัส HTTPS ปริมาณการใช้งาน" เป็น "... จากเบราว์เซอร์เท่านั้น" ในเครื่องมือ | ตัวเลือก ปัญหานี้ได้รับการแก้ไขสำหรับฉัน
tephyr

1

เมื่อเร็ว ๆ นี้ฉันพบปัญหาเดียวกันใน python 3.6 กับ visual studio 2015 หลังจากใช้เวลา 2 วันฉันได้รับการแก้ไขและทำงานได้ดีสำหรับฉัน

ฉันพบข้อผิดพลาดด้านล่างขณะพยายามติดตั้ง numpy โดยใช้ pip หรือจาก visual studio การรวบรวม numpy ไม่สามารถดึง URL https://pypi.python.org/simple/numpy/ : มีปัญหาในการยืนยันใบรับรอง SSL: [SSL: CERTIFICATE_VERIFY_FAILED] การตรวจสอบใบรับรองล้มเหลว (_ssl.c: 748) - การกระโดดข้ามไม่พบรุ่นที่ตรงตามข้อกำหนดจำนวน (จากรุ่น:) ไม่พบการแจกแจงที่ตรงกันสำหรับจำนวน

มติ:

สำหรับระบบปฏิบัติการ Windows

  1. open -> โฟลเดอร์ "% appdata%" สร้าง "pip" หากไม่มีอยู่
  2. ในโฟลเดอร์ pip สร้างไฟล์ "pip.ini"
  3. แก้ไขไฟล์และเขียน
    [global]
    Trusted-host = pypi.python.org บันทึกและปิดไฟล์ ตอนนี้ติดตั้งโดยใช้ pip / visual studio มันทำงานได้ดี

1

ในกรณีของฉันฉันใช้ Python ในอิมเมจ docker ขนาดเล็กที่สุด ไม่มีใบรับรอง root CA การแก้ไข:

apk update && apk add ca-certificates


1

Vaulsteinคำตอบของช่วยฉันด้วย

ฉันไม่พบไฟล์ pip.ini ที่ใดก็ได้บนพีซีของฉัน ดังนั้นได้ทำดังนี้

  1. ไปที่โฟลเดอร์ AppData คุณสามารถรับโฟลเดอร์ appdata ได้โดยเปิดพร้อมท์คำสั่งแล้วพิมพ์ echo% AppData%

ตำแหน่ง AppData โดยใช้พรอมต์คำสั่ง

หรือเพียงพิมพ์% AppData% ใน windows explorer

ตำแหน่ง AppData ใน windows explorer

  1. สร้างโฟลเดอร์ชื่อ pip ภายในโฟลเดอร์ appdata นั้น

  2. ในโฟลเดอร์ pip ที่คุณเพิ่งสร้างสร้าง textfile แบบง่าย ๆ ที่เรียกว่า pip.ini

  3. ผ่านการตั้งค่าคอนฟิกต่อไปนี้ในไฟล์นั้นโดยใช้เครื่องมือแก้ไขแบบง่าย ๆ ที่คุณเลือก

ไฟล์ pip.ini:

[list]
format=columns

[global]
trusted-host = pypi.python.org pypi.org

ตอนนี้คุณน่าจะดีไปแล้ว


1

ฉันประสบปัญหาคล้ายกัน วิธีแก้ปัญหาที่เหมาะกับฉัน 1) ถอนการติดตั้ง python 2.7 2) ลบโฟลเดอร์ python27 3) ติดตั้ง python ใหม่ล่าสุด


0

สำหรับฉันไม่มีวิธีการใดที่แนะนำ - ใช้ cert, HTTP, เชื่อถือได้ - โฮสต์

ในกรณีของฉันเปลี่ยนไปใช้แพคเกจรุ่นอื่น (paho-mqtt 1.3.1 แทนที่จะเป็น paho-mqtt 1.3.0 ในอินสแตนซ์นี้)

ดูเหมือนว่าปัญหานั้นมีเฉพาะกับแพ็คเกจรุ่นนั้น


0

คุณอาจมีปัญหานี้หากใบรับรองบางส่วนหายไปใน system.eg ของคุณใน opensuse install ca-certificate-mozilla

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