Некоммерческий удостоверяющий центр Let's Encrypt, контролируемый сообществом и предоставляющий сертификаты безвозмездно всем желающим, внёс изменение в пользовательское соглашение, определяющее права и обязанности получателей сертификатов. В секцию с условиями запроса и использования сертификатов добавлен пункт, не допускающий выдачу сертификатов для физических лиц и организаций, постоянно проживающих или зарегистрированных в странах или на территориях, на которые распространяются полномасштабные (comprehensive) санкции США. Помимо этого под запрет подпадают лица и организации, являющиеся объектом персональных санкций и ограничений экспортного контроля США, а также организации, контролируемые лицами, подпадающими под санкции, или действующие от их имени. Отмечается, что организация Let's Encrypt зарегистрирована в США и обязана выполнять правила экспортного контроля и санкции, действующие в США.
Комментируя изменение пользовательского соглашения, директор организации ISRG (Internet Security Research Group), которая является учредителем проекта Let's Encrypt, сказал, что сертификаты продолжат выдаваться для частных лиц и негосударственных компаний из Ирана и России, но не будут доступны для российских и иранских госучреждений.
До сих пор в Let's Encrypt применялись точечные блокировки, не позволяющие получить сертификат для конкретных доменов.
"CRL или CAC — списки SSL-сертификатов, отозванных центром выдачи (CA). На 2017 год происходит отказ от использования CRL (САС) в пользу OCSP (Онлайн Протокол Состояния Сертификата).
SSL обеспечивает защищённое HTTPS-соединение с сайтом, но существуют угрозы безопасности даже при действующем сертификате. Самая распространённая – секретный ключ скомпрометирован. Передача данных становится небезопасна. Чтобы номера кредитных карт и пароли пользователей не попали к мошенникам, сертификат нужно отозвать."
Пользуюсь Firefox, периодически возникает надобность посмотреть сертификат сайта. По умолчанию это очень неудобно - куча лишних действий и дополнительное окно.
Наткнулся на расширение для FF - IndicateTLS. Пользуюсь, доволен. Советую.
Для ЛЛ: дырища в библиотеке. Обсуждаются цифры в миллиард возможно уязвимого "всего"
Отсутствие проверки размера хеша/дайджеста и OID позволяет функциям проверки подписи принимать дайджесты меньшего размера, чем разрешено при проверке сертификатов ECDSA, или меньшего размера, чем подходит для соответствующего типа ключа. Это может привести к снижению безопасности аутентификации на основе сертификатов ECDSA, если известен также открытый ключ центра сертификации. Это влияет на проверку ECDSA/ECC, если также включены EdDSA или ML-DSA.
Missing hash/digest size and OID checks allow digests smaller than allowed when verifying ECDSA certificates, or smaller than is appropriate for the relevant key type, to be accepted by signature verification functions. This could lead to reduced security of ECDSA certificate-based authentication if the public CA key used is also known. This affects ECDSA/ECC verification when EdDSA or ML-DSA is also enabled.
Ошибка SSLCertVerificationError часто возникает при попытке установить соединение с HTTPS-сервером. Это происходит, когда Python не может проверить подлинность SSL-сертификата сайта. Причины могут быть разными: отсутствующие корневые сертификаты, проблемы с сертификатом на сервере или неправильная настройка клиента.
В этой статье я рассмотрю способы обхода этой ошибки, и покажу, что такое SSL-сертификаты и как работать с ними, используя различные инструменты.
🔍 Что такое SSL-сертификат и зачем он нужен?
SSL (Secure Sockets Layer) — это протокол безопасности, который обеспечивает защищённую передачу данных между клиентом и сервером. Он используется для шифрования данных и подтверждения подлинности сервера.
💡 Пример: Алиса и Борис
Представьте, что Алиса хочет отправить Борису важное сообщение, но боится, что кто-то может перехватить его. Для того чтобы удостовериться, что сообщение дошло именно до Бориса, она решает использовать шифрование с сертификатами.
Алиса: она знает, что только Борис может расшифровать сообщение, потому что у него есть приватный ключ.
Борис: он подтверждает свою личность с помощью сертификата, который содержит его публичный ключ. Этот сертификат выдан надёжным центром сертификации, который гарантирует, что Борис действительно является тем, за кого себя выдает.
SSL-сертификат — это как удостоверение личности для веб-сайта, которое помогает избежать MITM-атак (атака «человек посередине») и обеспечивает безопасность передачи данных.
🛠 Способы решения ошибки SSLCertVerificationError
✅ Способ 1: Отключение проверки SSL (не рекомендуется для продакшн-среды)
Наиболее быстрый способ обойти ошибку — это отключить проверку сертификата. Это удобно, когда вы работаете с локальными серверами или сайтами, которым доверяете. Однако важно помнить, что это небезопасное решение.
⚠️ Важно: Использовать verify=False стоит только для доверенных источников и в локальной разработке. В продакшн-средах лучше избегать этого метода.
✅ Способ 2: Установка корневых сертификатов (перманентное решение для Windows)
Если вы используете Windows и у вас отсутствуют корневые сертификаты, вы можете установить их вручную. Это решение обеспечит, чтобы библиотека requests могла корректно проверять сертификаты на всех веб-сайтах.
Инструкция для Windows:
Перейдите в папку установки Python. Например:C:\Users\<твой_пользователь>\AppData\Local\Programs\Python\Python312\
Запустите файл Install Certificates.command (или install_certificates.bat, в зависимости от версии Python).
Это действие установит необходимые корневые сертификаты для вашего Python.
✅ Способ 3: Использование библиотеки certifi
Для того чтобы гарантировать корректную проверку SSL-сертификатов, можно использовать библиотеку certifi, которая поставляется с актуальными корневыми сертификатами.
Этот способ более безопасен, чем отключение проверки SSL, и является хорошей альтернативой для тех, кто не хочет вручную устанавливать сертификаты.
🛠 Как создать SSL-сертификат на Windows?
Для тестирования и локальной разработки можно использовать самоподписанные сертификаты. Мы рассмотрим два способа их создания: через PowerShell и через командную строку (CMD).
🧰 Способ 1: Создание самоподписанного сертификата через PowerShell
PowerShell позволяет быстро создать самоподписанный SSL-сертификат. Вот пример команды:
Экспорт сертификата и ключа:
Вы можете использовать эти сертификаты для тестирования локальных серверов.
🧰 Способ 2: Создание сертификата через командную строку (CMD) с помощью openssl
Если у вас установлен OpenSSL, вы можете использовать его для создания сертификатов через командную строку.
Для правильной работы мини приложения вам необходимо будет создать бота (в интернете куча подробных инструкций, как это сделать) и настроить его для работы с мини-приложением. Вот как процедура настройки выглядела у меня.
Этапы настройки бота
Важная особенность, когда бот запросит указать «Web App URL» вы должны указать именно доменное имя, а не ip адрес, и обязательно через https, а не http. Как видите, в моем случае, был указан URL https://socionyx.ru/. А как быть тем, кто только что по моей шедевральной (хе-хе-хе) инструкции только-только настроил VPS и развернул на нем свое приложение, которое теперь открывается по ip адресу?
Как быть-то теперь?
Очевидно же, получить доменное имя и ssl сертификат безопасности, для реализации https. По запросу в гугле «купить домен» у вас появится целый список сервисов, которые позволят вам осуществить данную процедуру. Мне домен socionyx.ru стоил 169 рублей на год. Теперь у вас есть домен и необходимо связать его с ip адресом VPS, на которой разворачивается ваше приложение. У меня ситуация сложилась следующая, VPS была на одном сервисе, а доменное имя я получил на другом сервисе, и чтобы их подружить, пришлось выполнить некоторые дополнительные действия. Вдаваться в технические детали не буду, так как это:
Усложнит и так не простой для понимания материал;
В зависимости от выбранных вами сервисов по предоставлению VPS и домена, шаги могут немного отличаться.
Учитывая, что я сам это делал впервые и разобрался, это определенно не «rocket science» и вы без проблем сможете справится с этой задачей.
А вот что я вам более подробно расскажу, так это настройка nginx, чтобы ваш сервис открывался по доменному имени, а не ip адресу. В файле конфигураций nginx необходимо написать следующее:
Ранее в строке с «server_name socionyx.ruwww.socionyx.ru; » вместо «socionyx.ruwww.socionyx.ru;» был написан ip адрес вида 172.165.4.2. И все, теперь по вашему доменному имени должно открываться ваше приложение. Но стойте!!! Что это за ужас?!?!?!?!?!!?
Хром ругается, ох напасть-то какая эээээээ…
Похожая ошибка для вашего сервиса будет и в других браузерах. Надо решать проблему, настало время приобрести ssl сертификат.
Все так и работает, чесна чесна
Аналогично домену, по запросу в гугле «купить ssl сертификат» у вас также появится целый список сервисов, которые позволят вам осуществить данную процедуру. Мне сертификат достался бесплатно на 6 месяцев за приобретенный домен, да, есть у моего регистратора доменных имен такая приятная функция. На почту или в личном кабинете вам должны прийти как минимум два сертификата, вида certificate.crt и certificate.key. А дальше снова nginx и в файле конфигурации теперь все будет выглядеть примерно следующим образом.
И все, ждете какое-то время пока все настройки придут в силу и ваше приложение теперь спокойно может открываться по https и в настройках бота можно наконец-то указать для «Web App URL» URL вашего приложения. На сегодня все, о дальнейших настройках бота для полноценного запуска вашего приложения в виде мини-приложения в telegram я напишу в следующей части.
А, ну и конечно, как я уже ранее писал, мини-приложение уже готово и ждет своих пользователей, как говорится welcome t.me/Socionyx_Bot/socionyx.
Буду премного благодарен за обратную связь и замечания по работе текущего мини-приложения.
P.S. извини меня мой дорогой nikita17cm, уж очень объемным получился уже данный пост, поэтому о «микросерверности», и разделе бота и основного бэкенда придется поведать в следующей части.
На вкладке "Ресурсные записи" перейти на вкладку "TXT"
Добавить записи "_acme-challenge" и "_acme-challenge.www" с значениями из раздела DNS-01 в настройках плагина
Подождать около 10-15 минут, пока DNS записи обновятся
Вернуться к настройкам плагина (7-9 пункт)
В ЛК хостинга перейти в раздел "Виртуальный хостинг" - "Панель управления"
Перейти в "SSL и антивирус"
Кнопка "Установить"
Загрузить файлы сертификата в соответствующие пункты. Сертификат - certificate.pem, Промежуточный сертификат - cabundle.pem, Приватный ключ сертификата - private.pem
На этом всё, через некоторое время сертификат заработает и браузеры перестанут "ругаться" на ваш сайт.
Сертификат действует 3 месяца. Рекомендуется обновлять каждые 2 месяца.
В целом никому не рекомендую пользоваться услугами этого хостера, но если по каким-то причинам не можете перейти, то пользуйтесь этой инструкцией. Самый дешевый SSL в nic.ru от 12к, а бесплатный они очень неохотно выдают и придумают множество причин отказать в услуге.
Мы довольно долго смеялись над Казахстаном с их попытками пропихнуть свой корневой сертификат который все корневые центры сертификации экстренно отозвали. Наши ребята пошли окольными путями и начали блокировать часть гос-сервисов и для доступа к ним теперь надо или браузер специальный ставить (отбитый на всю голову еще и с модулями наблюдения которые Атом или Яндекс.Браузер) или ставить сертификаты корневые и конечно же не вызывающие подозрений – Российские от МинЦифры. Выбора особо не оставили, да мне и по работе эти чертовы сертификаты нужны, посему погнали попробуем завести эту шайтан-машину.
Набросал инструкцию как их впиндюрить как в хром, так и на уровне системы, может кому поможет, а то без Сбер-ID как-то грустно.