Skip to content

Instantly share code, notes, and snippets.

@marschhuynh
Created January 6, 2019 03:59
Show Gist options
  • Star 63 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save marschhuynh/31c9375fc34a3e20c2d3b9eb8131d8f3 to your computer and use it in GitHub Desktop.
Save marschhuynh/31c9375fc34a3e20c2d3b9eb8131d8f3 to your computer and use it in GitHub Desktop.
# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module. Uses the certificates provided by the certifi package:
# https://pypi.python.org/pypi/certifi
import os
import os.path
import ssl
import stat
import subprocess
import sys
STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
| stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
| stat.S_IROTH | stat.S_IXOTH )
def main():
openssl_dir, openssl_cafile = os.path.split(
ssl.get_default_verify_paths().openssl_cafile)
print(" -- pip install --upgrade certifi")
subprocess.check_call([sys.executable,
"-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])
import certifi
# change working directory to the default SSL directory
os.chdir(openssl_dir)
relpath_to_certifi_cafile = os.path.relpath(certifi.where())
print(" -- removing any existing file or link")
try:
os.remove(openssl_cafile)
except FileNotFoundError:
pass
print(" -- creating symlink to certifi certificate bundle")
os.symlink(relpath_to_certifi_cafile, openssl_cafile)
print(" -- setting permissions")
os.chmod(openssl_cafile, STAT_0o775)
print(" -- update complete")
if __name__ == '__main__':
main()
@Benv547
Copy link

Benv547 commented Feb 15, 2021

Magic, ty. :o

@alanyee
Copy link

alanyee commented Mar 19, 2021

@XxMicrowavexX
Copy link

i get an error that i dont have permission

@Np7J
Copy link

Np7J commented Mar 29, 2021

Thanks :)

@FrankyDBravo
Copy link

great! but apparently my certificate are in anaconda3 and I have the following error:

os.remove(openssl_cafile)
PermissionError: [Errno 1] Operation not permitted: 'anaconda3'

@jaimex8
Copy link

jaimex8 commented May 23, 2021

After 2 days of searching...this solved my issues, thank you!

@hartiksalaria
Copy link

thanks it worked :)

@flo213
Copy link

flo213 commented Oct 26, 2021

its nice but I have a error and i dont no how fix it:
-- pip install --upgrade certifi
Traceback (most recent call last):
File "C:/Users/flori/Downloads/ok.py", line 44, in
main()
File "C:/Users/flori/Downloads/ok.py", line 24, in main
subprocess.check_call([sys.executable,
File "C:\Users\flori\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['C:\Users\flori\AppData\Local\Programs\Python\Python39\pythonw.exe', '-E', '-s', '-m', 'pip', 'install', '--upgrade', 'certifi']' returned non-zero exit status 2.

@sidharrth2002
Copy link

this worked for me!

@wyankx
Copy link

wyankx commented Apr 15, 2022

Thanks)

@mmani648
Copy link

thanks a lot worked for me....

@1chooo
Copy link

1chooo commented May 23, 2022

Thanks

@xiaoxiao0522
Copy link

thank you very very much. it works for me.

@thecasualpenguin
Copy link

wickedly neat!

@sergiopani
Copy link

Thanks!! A lot, worked perfectly for me!

@BowenLiang-lbw
Copy link

Thanks!! Works for me!!

@Roodootoo
Copy link

Thank you!!

@sathyarajshetigar
Copy link

sathyarajshetigar commented Feb 15, 2023

File "D:\PTest\ssl_certificate.py", line 29, in main
os.chdir(openssl_dir)
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:\Program Files\Common Files\SSL'
such folder is not there in my windows 11

Update:
Fixed it by creating a folder named SSL in C:\Program Files\Common Files\

@ez-daniel
Copy link

I got the following errror:
Could not fetch URL https://pypi.org/simple/certifi/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/certifi/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)'))) - skipping
ERROR: Could not find a version that satisfies the requirement certifi (from versions: none)
ERROR: No matching distribution found for certifi

I'm in Windows 10. How to resolve this error? Thanks.

@SKR
Copy link

SKR commented Apr 14, 2023

Thanks, it solves my problem!

@MikhailStukalau
Copy link

Thanks! You'r the best!

@kevlarCode
Copy link

Yes!! It runs! Thanks for that life saver!

@gr8h
Copy link

gr8h commented May 9, 2023

perfect!! thanks

@lucreciaef
Copy link

lucreciaef commented May 18, 2023

I use Win11, and first it didn't find the directory, so I created the folder 'C:\Program Files\Common Files\SSL' manually.
Then, I'm having this error - ideas?

Traceback (most recent call last):
File "C:...\certif.py", line 44, in
main()
File "C:...\certif.py", line 38, in main
os.symlink(relpath_to_certifi_cafile, openssl_cafile)
PermissionError: [WinError 5] Access is denied: '..\..\..\...\venv\lib\site-packages\certifi\cacert.pem' -> 'cert.pem'

Edit: I was too quick to post. It failed when running from PyCharm but then worked when running it via Powershell as admin

@sanywright13
Copy link

thank you

@Manimestro
Copy link

Thank you .. helped a lot

@PaulHendi
Copy link

Thanks a lot !!

@BasiliskDev
Copy link

Ty

@arkahome
Copy link

Just change this part to not get FileNotFound Error :

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:\Program Files\Common Files\ssl'

    try:
        os.chdir(openssl_dir)
    except FileNotFoundError:
        os.makedirs(openssl_dir)
        os.chdir(openssl_dir)

Full Code :

# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.python.org/pypi/certifi

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )


def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    print(" -- pip install --upgrade certifi")
    subprocess.check_call([sys.executable,
        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi

    # change working directory to the default SSL directory
    try:
        os.chdir(openssl_dir)
    except FileNotFoundError:
        os.makedirs(openssl_dir)
        os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()

@lrayne
Copy link

lrayne commented Apr 14, 2024

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment