@TheIrishMan

Ошибка ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:1000)?

У меня есть приложение на python:

import os
import io
import time
import string
import logging

from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload


# Настройка логирования
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# Форматтер логов
formatter = logging.Formatter(
    '%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d')

# Обработчик для записи логов в файл
file_handler = logging.FileHandler('script.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

# Обработчик для вывода логов в консоль
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)


# Путь к файлу с учетными данными сервисного аккаунта
SERVICE_ACCOUNT_FILE = 'credits.json'

# Определение областей доступа
SCOPES = ['https://www.googleapis.com/auth/drive']

# Создание учетных данных и сервиса
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

service = build('drive', 'v3', credentials=credentials)


def list_folders(service):
    results = service.files().list(
        q="mimeType='application/vnd.google-apps.folder'",
        fields="nextPageToken, files(id, name)").execute()
    items = results.get('files', [])
    folders = []
    if items:
        for item in items:
            folders.append((item['name'], item['id']))
    return folders


def sanitize_filename(filename):
    valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
    # Добавляем кириллические символы
    valid_chars += "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
    # Добавляем кириллические символы заглавные
    valid_chars += "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
    cleaned_filename = ''.join(c for c in filename if c in valid_chars)
    cleaned_filename = cleaned_filename.replace(
        ' ', '_')  # Заменяем пробелы на подчеркивания
    # Сокращаем имя файла, если оно слишком длинное
    return cleaned_filename[:255]


def download_spreadsheets(service, folder_id, folder_name):
    download_dir = "Файлы"
    results = service.files().list(
        q=f"'{folder_id}' in parents and mimeType='application/vnd.google-apps.spreadsheet'",
        fields="nextPageToken, files(id, name)").execute()
    items = results.get('files', [])
    if not items:
        logger.info(f"В папке '{folder_name}' нет таблиц для загрузки.")
        return
    for item in items:
        try:
            # Добавляем к названию файла часть его ID
            file_id_fragment = item['id'][:8]
            filename = f"{folder_name}_{item['name']}_{file_id_fragment}.xlsx"
            sanitized_filename = sanitize_filename(filename)
            full_file_path = os.path.join(download_dir, sanitized_filename)
            request = service.files().export_media(fileId=item['id'],
                                                   mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            fh = io.BytesIO()
            downloader = MediaIoBaseDownload(fh, request)
            done = False
            while done is False:
                status, done = downloader.next_chunk()
            fh.seek(0)
            os.makedirs(os.path.dirname(full_file_path), exist_ok=True)
            with open(full_file_path, 'wb') as f:
                f.write(fh.read())
            logger.info(f"Скачал {sanitized_filename} в {download_dir}")
        except Exception as e:
            logger.error(f"Ошибка при скачивании {item['name']}: {e}")


def main():
    folders = list_folders(service)
    for folder_name, folder_id in folders:
        logger.info(f"Перехожу в папку \"{folder_name}\"")
        download_spreadsheets(service, folder_id, folder_name)
        logger.info(f"Ожидаю 20 секунд")
        time.sleep(20)


if __name__ == '__main__':
    main()

Но при запуске я получаю ошибку:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:1000)


Копания на просторах интернета мне не помогли. Как исправить данную ошибку?

ОС: Windows 10

ПО: Python 3.12

P.S. удаление антивируса не вариант, т.к. работаю на корпоративном окружении.
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 1
@HungryOleg
В терминале попробуй установить сертификаты командой
pip install pip-system-certs
Для win32:
pip install python-certifi-win32
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы