Vấn đềNếu bạn đang phải đối mặt với một màn hình đầy chữ đỏ khi cố gắng cài đặt một gói Python, có khả năng bạn đang ở sau một tường lửa doanh nghiệp. Điều này thường xảy ra khi công ty của bạn sử dụng SSL Inspection (Deep Packet Inspection) thông qua các công cụ như Zscaler hoặc Fortinet. Khi bạn chạy lệnh pip install, pip sẽ cố gắng kết nối với PyPI qua kết nối HTTPS bảo mật. Proxy của doanh nghiệp sẽ chặn kết nối này, giải mã lưu lượng để quét mã độc và ký lại bằng chứng chỉ nội bộ của chính nó.
Các bản cài đặt Python tiêu chuẩn không biết về cơ quan chứng thực (Certificate Authority) riêng của công ty bạn. Vì pip không thể xác minh danh tính của proxy, nó sẽ ngắt kết nối để bảo vệ bạn khỏi một cuộc tấn công xen giữa (man-in-the-middle) tiềm ẩn.
Thông báo lỗi```
pip._vendor.urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='pypi.org', port=443): ... [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)
## Nguyên nhân gốc rễPip cực kỳ khắt khe về vấn đề bảo mật. Không giống như trình duyệt web, pip không kiểm tra Windows System Certificate Store theo mặc định. Thay vào đó, nó dựa vào một gói chứng chỉ tin cậy nội bộ được cung cấp bởi thư viện `certifi`. Khi proxy thay thế chứng chỉ PyPI thật bằng chứng chỉ của doanh nghiệp, pip sẽ kiểm tra danh sách của nó, không tìm thấy kết quả khớp và kích hoạt lỗi `SSLCertVerificationError`.
## Giải pháp 1: Cách xử lý nhanh (Bảo mật thấp)Sử dụng phương pháp này nếu bạn cần cài đặt ngay một gói duy nhất như `pandas` hoặc `requests`. Bằng cách đánh dấu các tên miền cụ thể là "tin cậy" (trusted), bạn yêu cầu pip bỏ qua việc kiểm tra SSL chỉ dành cho các host đó. Đây là một cách bỏ qua có mục tiêu, an toàn hơn so với việc vô hiệu hóa SSL trên toàn hệ thống.
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name>
Lưu ý: Bạn sẽ phải nhập các tham số này mỗi khi cài đặt một gói mới.
## Giải pháp 2: Phương pháp "Thiết lập một lần"Hầu hết các nhà phát triển thích một giải pháp lâu dài hơn. Bạn có thể sửa đổi cấu hình pip toàn cục để nó luôn tin tưởng các tên miền cần thiết. Đây là cách hiệu quả nhất để xử lý các vấn đề proxy dai dẳng trên máy tính làm việc.
- Mở Command Prompt hoặc PowerShell.- Thực thi lệnh sau:```
pip config set global.trusted-host "pypi.org files.pythonhosted.org pypi.python.org"
Lệnh này sẽ tự động tạo một tệp pip.ini tại %APPDATA%\pip\pip.ini. Từ giờ trở đi, pip sẽ bỏ qua việc xác thực chứng chỉ cho ba nguồn gói Python chính này.
Giải pháp 3: Cách tiếp cận ưu tiên bảo mật (Khuyến nghị)Cách chuyên nghiệp nhất để khắc phục vấn đề này là dạy cho pip tin tưởng chứng chỉ của doanh nghiệp bạn. Điều này giúp kết nối của bạn luôn được mã hóa và xác thực.
Bước A: Xuất chứng chỉ của doanh nghiệp- Truy cập vào https://pypi.org trên Chrome hoặc Edge.- Nhấp vào Biểu tượng ổ khóa bên cạnh URL > Kết nối an toàn > Chứng chỉ hợp lệ.- Chuyển sang tab Details và chọn Root CA (mục cao nhất trong cấu trúc phân cấp).- Nhấp vào Export và lưu dưới dạng tệp Base-64 encoded X.509 (.CER).- Đổi tên tệp thành company-root.pem.### Bước B: Chỉ định chứng chỉ cho PipBạn có thể chỉ định chính xác vị trí của tệp này cho pip bằng cách sử dụng biến môi trường. Điều này đảm bảo rằng các công cụ Python khác, như thư viện requests, cũng được hưởng lợi từ việc sửa lỗi này.
setx PIP_CERT "C:\Users\YourName\Documents\company-root.pem"
setx REQUESTS_CA_BUNDLE "C:\Users\YourName\Documents\company-root.pem"
Lưu ý: Khởi động lại terminal sau khi chạy lệnh setx để các thay đổi có hiệu lực.
Giải pháp 4: Hợp nhất chứng chỉ vào CertifiĐôi khi gói certifi cục bộ của bạn chỉ đơn giản là đã cũ. Nếu bạn có thể sử dụng Wi-Fi khách hoặc điểm phát sóng di động trong 60 giây, hãy thử cập nhật trực tiếp gói này:
python -m pip install --upgrade certifi
Nếu bạn bắt buộc phải ở trong mạng doanh nghiệp, hãy tìm nơi lưu trữ chứng chỉ của bạn bằng cách chạy:
python -c "import certifi; print(certifi.where())"
Mở tệp đó trong Notepad++, cuộn xuống dưới cùng và dán nội dung văn bản của chứng chỉ .pem doanh nghiệp của bạn vào. Điều này sẽ hợp nhất sự tin cậy của công ty bạn với tiêu chuẩn toàn cầu.
Kiểm traĐể xác nhận mọi thứ đang hoạt động, hãy thử cài đặt mới. Chúng ta sử dụng tham số --no-cache-dir để buộc pip kết nối với máy chủ thay vì sử dụng tệp đã có trên ổ cứng.
pip install --no-cache-dir requests
Nếu quá trình tải xuống 100KB hoàn tất mà không có lỗi, môi trường Python của bạn đã chính thức nhận biết được proxy.

