Skip to content

pip can't install from pypi.org on Windows because of missing root certificate #13465

@usiems

Description

@usiems

Description

I installed the official Python 3.13.5 on a computer with Windows 10 Enterprise (22H2). I tried the following command:
python -m pip install permutation
I get the following output:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))': /simple/permutation/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))': /simple/permutation/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))': /simple/permutation/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))': /simple/permutation/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))': /simple/permutation/
Could not fetch URL https://pypi.org/simple/permutation/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/permutation/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))) - skipping
ERROR: Could not find a version that satisfies the requirement permutation (from versions: none)
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)'))) - skipping
ERROR: No matching distribution found for permutation

It turns out that the root certificate of pypi.org (GlobalSign Root CA - R3) wasn't installed on the machine. Installing it on the machine fixed the issue; adding the option --use-deprecated=legacy-certs to the pip command also worked (I uninstalled the certificate again to test this).

I want to add that access to the Internet for the affected computer goes through a proxy, so HTTPS_PROXY is set, just in case this somehow contributes to the problem.

Expected behavior

From reading the release notes for 24.2 (and looking at the source code as well) I got the assumption that the certificates from certifi are checked in addition to the ones from the system store, so the root certificate for pypi.org doesn't need to be installed. Am I wrong?

pip version

25.1.1

Python version

3.13.5

OS

Windows 10 Enterprise (22H2)

How to Reproduce

Uninstall the root certificate with the Friendly Name "GlobalSign Root CA - R3" from the Windows certificate store (all locations, in both the user and system stores).
Then try to install any package from pypi.org.

Output

See above.

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    S: needs triageIssues/PRs that need to be triagedtype: bugA confirmed bug or unintended behavior

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions