Update macOS SSL certificates (#447)
Update macOS SSL certificates using latest `certifi` certificate bundle. Co-authored-by: Yannick Jadoul <yannick.jadoul@belgacom.net> Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com>
This commit is contained in:
co-authored by
Yannick Jadoul
Matthieu Darbois
parent
97dd4ee1c0
commit
8094b3f6db
@@ -11,7 +11,7 @@ from typing import Dict, List, NamedTuple, Optional, Sequence, Union
|
|||||||
from .environment import ParsedEnvironment
|
from .environment import ParsedEnvironment
|
||||||
from .util import (BuildOptions, BuildSelector, NonPlatformWheelError, download,
|
from .util import (BuildOptions, BuildSelector, NonPlatformWheelError, download,
|
||||||
get_build_verbosity_extra_flags, get_pip_script,
|
get_build_verbosity_extra_flags, get_pip_script,
|
||||||
prepare_command)
|
prepare_command, install_certifi_script)
|
||||||
|
|
||||||
|
|
||||||
def call(args: Union[str, Sequence[Union[str, PathLike]]], env: Optional[Dict[str, str]] = None, cwd: Optional[str] = None, shell: bool = False) -> int:
|
def call(args: Union[str, Sequence[Union[str, PathLike]]], env: Optional[Dict[str, str]] = None, cwd: Optional[str] = None, shell: bool = False) -> int:
|
||||||
@@ -72,6 +72,9 @@ def install_cpython(version: str, url: str) -> Path:
|
|||||||
|
|
||||||
# if this version of python isn't installed, get it from python.org and install
|
# if this version of python isn't installed, get it from python.org and install
|
||||||
python_package_identifier = f'org.python.Python.PythonFramework-{version}'
|
python_package_identifier = f'org.python.Python.PythonFramework-{version}'
|
||||||
|
python_executable = 'python3' if version[0] == '3' else 'python'
|
||||||
|
installation_bin_path = Path(f'/Library/Frameworks/Python.framework/Versions/{version}/bin')
|
||||||
|
|
||||||
if python_package_identifier not in installed_system_packages:
|
if python_package_identifier not in installed_system_packages:
|
||||||
# download the pkg
|
# download the pkg
|
||||||
download(url, Path('/tmp/Python.pkg'))
|
download(url, Path('/tmp/Python.pkg'))
|
||||||
@@ -83,8 +86,8 @@ def install_cpython(version: str, url: str) -> Path:
|
|||||||
download(open_ssl_patch_url, Path('/tmp/python-patch.tar.gz'))
|
download(open_ssl_patch_url, Path('/tmp/python-patch.tar.gz'))
|
||||||
call(['sudo', 'tar', '-C', f'/Library/Frameworks/Python.framework/Versions/{version}/', '-xmf', '/tmp/python-patch.tar.gz'])
|
call(['sudo', 'tar', '-C', f'/Library/Frameworks/Python.framework/Versions/{version}/', '-xmf', '/tmp/python-patch.tar.gz'])
|
||||||
|
|
||||||
installation_bin_path = Path(f'/Library/Frameworks/Python.framework/Versions/{version}/bin')
|
call(["sudo", str(installation_bin_path/python_executable), str(install_certifi_script)])
|
||||||
python_executable = 'python3' if version[0] == '3' else 'python'
|
|
||||||
pip_executable = 'pip3' if version[0] == '3' else 'pip'
|
pip_executable = 'pip3' if version[0] == '3' else 'pip'
|
||||||
make_symlinks(installation_bin_path, python_executable, pip_executable)
|
make_symlinks(installation_bin_path, python_executable, pip_executable)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# Based on: https://github.com/python/cpython/blob/master/Mac/BuildScript/resources/install_certificates.command
|
||||||
|
|
||||||
|
# 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.org/project/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)
|
||||||
|
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
FileNotFoundError = OSError
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
if sys.version_info[0:2] == (3, 5):
|
||||||
|
os.makedirs(openssl_dir, exist_ok=True, mode=0o775)
|
||||||
|
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()
|
||||||
@@ -127,6 +127,7 @@ class BuildOptions(NamedTuple):
|
|||||||
|
|
||||||
resources_dir = Path(__file__).resolve().parent / 'resources'
|
resources_dir = Path(__file__).resolve().parent / 'resources'
|
||||||
get_pip_script = resources_dir / 'get-pip.py'
|
get_pip_script = resources_dir / 'get-pip.py'
|
||||||
|
install_certifi_script = resources_dir / "install_certifi.py"
|
||||||
|
|
||||||
|
|
||||||
class NonPlatformWheelError(Exception):
|
class NonPlatformWheelError(Exception):
|
||||||
|
|||||||
+2
-3
@@ -13,11 +13,10 @@ project_with_ssl_tests = test_projects.new_c_project(
|
|||||||
else:
|
else:
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
|
|
||||||
if sys.version_info[0:2] == (3, 3):
|
|
||||||
data = urlopen("https://www.nist.gov")
|
|
||||||
else:
|
|
||||||
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
|
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
|
||||||
data = urlopen("https://www.nist.gov", context=context)
|
data = urlopen("https://www.nist.gov", context=context)
|
||||||
|
data = urlopen("https://raw.githubusercontent.com/joerick/cibuildwheel/master/CI.md", context=context)
|
||||||
|
data = urlopen("https://raw.githubusercontent.com/joerick/cibuildwheel/master/CI.md")
|
||||||
''')
|
''')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user