Merge pull request #447 from Iamrodos/master

fix: Improve CA certificate detection with fallback chain
This commit is contained in:
Jose Diaz-Gonzalez
2025-11-16 18:54:58 -05:00
committed by GitHub
2 changed files with 25 additions and 15 deletions

View File

@@ -37,22 +37,33 @@ FNULL = open(os.devnull, "w")
FILE_URI_PREFIX = "file://" FILE_URI_PREFIX = "file://"
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Setup SSL context with fallback chain
https_ctx = ssl.create_default_context() https_ctx = ssl.create_default_context()
if not https_ctx.get_ca_certs(): if https_ctx.get_ca_certs():
import warnings # Layer 1: Certificates pre-loaded from system (file-based)
pass
else:
paths = ssl.get_default_verify_paths()
if (paths.cafile and os.path.exists(paths.cafile)) or (
paths.capath and os.path.exists(paths.capath)
):
# Layer 2: Cert paths exist, will be lazy-loaded on first use (directory-based)
pass
else:
# Layer 3: Try certifi package as optional fallback
try:
import certifi
warnings.warn( https_ctx = ssl.create_default_context(cafile=certifi.where())
"\n\nYOUR DEFAULT CA CERTS ARE EMPTY.\n" except ImportError:
+ "PLEASE POPULATE ANY OF:" # All layers failed - no certificates available anywhere
+ "".join( sys.exit(
["\n - " + x for x in ssl.get_default_verify_paths() if type(x) is str] "\nERROR: No CA certificates found. Cannot connect to GitHub over SSL.\n\n"
) "Solutions you can explore:\n"
+ "\n", " 1. pip install certifi\n"
stacklevel=2, " 2. Alpine: apk add ca-certificates\n"
) " 3. Debian/Ubuntu: apt-get install ca-certificates\n\n"
import certifi )
https_ctx = ssl.create_default_context(cafile=certifi.where())
def logging_subprocess( def logging_subprocess(

View File

@@ -1 +0,0 @@