mirror of
https://github.com/josegonzalez/python-github-backup.git
synced 2025-12-05 16:18:02 +01:00
Merge pull request #447 from Iamrodos/master
fix: Improve CA certificate detection with fallback chain
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user