Windows certificate verify failed ssl c

Почему возникают ошибки SSL-соединения и как их исправить?

Зачастую после установки SSL-сертификатов многие пользователи сталкиваются с ошибками, которые препятствуют корректной работе защищенного протокола HTTPS.

Предлагаем разобраться со способами устранения подобных ошибок.

Что такое SSL?

SSL (Secure Socket Layer) — это интернет-протокол для создания зашифрованного соединения между пользователем и сервером, который гарантирует безопасную передачу данных.

Когда пользователь заходит на сайт, браузер запрашивает у сервера информацию о наличии сертификата. Если сертификат установлен, сервер отвечает положительно и отправляет копию SSL-сертификата браузеру. Затем браузер проверяет сертификат, название которого должно совпадать с именем сайта, срок действия сертификата и наличие корневого сертификата, выданного центром сертификации.

Причины возникновения ошибок SSL-соединения

Когда сертификат работает корректно, адресная строка браузера выглядит примерно так:

Но при наличии ошибок она выглядит несколько иначе:

Существует множество причин возникновения таких ошибок. К числу основных можно отнести:

  • Некорректную дату и время на устройстве (компьютер, смартфон, планшет и т.д.);
  • Ненадежный SSL-сертификат;
  • Брандмауэр или антивирус, блокирующие сайт;
  • Включенный экспериментальный интернет-протокол QUIC;
  • Отсутствие обновлений операционной системы;
  • Использование SSL-сертификата устаревшей версии 3.0;
  • Появление ошибки «Invalid CSR» при генерации сертификата из панели управления облачного провайдера.

Давайте рассмотрим каждую из них подробнее.

Проблемы с датой и временем

Если на устройстве установлены некорректные дата и время, ошибка SSL-соединения неизбежна, ведь при проверке сертификата происходит проверка срока его действия. Современные браузеры умеют определять такую ошибку самостоятельно и выводят сообщение о неправильно установленной дате или времени.

Для исправления этой ошибки достаточно установить на устройстве актуальное время. После этого необходимо перезагрузить страницу или браузер.

Ненадежный SSL-сертификат

Иногда при переходе на сайт, защищенный протоколом HTTPS, появляется ошибка «SSL-сертификат сайта не заслуживает доверия».

Одной из причин появления такой ошибки, как и в предыдущем случае, может стать неправильное время. Однако есть и вторая причина — браузеру не удается проверить цепочку доверия сертификата, потому что не хватает корневого сертификата. Для избавления от такой ошибки необходимо скачать специальный пакет GeoTrust Primary Certification Authority, содержащий корневые сертификаты. После скачивания переходим к установке. Для этого:

  • Нажимаем сочетание клавиш Win+R и вводим команду certmgr.msc, жмем «Ок». В Windows откроется центр сертификатов.
  • Раскрываем список «Доверенные корневые центры сертификации» слева, выбираем папку «Сертификаты», кликаем по ней правой кнопкой мышки и выбираем «Все задачи — импорт».

  • Запустится мастер импорта сертификатов. Жмем «Далее».

  • Нажимаем кнопку «Обзор» и указываем загруженный ранее сертификат. Нажимаем «Далее»:

  • В следующем диалоговом окне указываем, что сертификаты необходимо поместить в доверенные корневые центры сертификации, и нажимаем «Далее». Импорт должен успешно завершиться.

После вышеперечисленных действий можно перезагрузить устройство и проверить отображение сайта в браузере.

Брандмауэр или антивирус, блокирующие сайт

Некоторые сайты блокируются брандмауэром Windows. Для проверки можно отключить брандмауэр и попробовать зайти на нужный сайт. Если SSL-сертификат начал работать корректно, значит дело в брандмауэре. В браузере Internet Explorer вы можете внести некорректно работающий сайт в список надежных и проблема исчезнет. Однако таким образом вы снизите безопасность своего устройства, так как содержимое сайта может быть небезопасным, а контроль сайта теперь отключен.

Также SSL может блокировать антивирусная программа. Попробуйте отключить в антивирусе проверку протоколов SSL и HTTPS и зайти на сайт. При необходимости добавьте сайт в список исключений антивируса.

Включенный экспериментальный протокол QUIC

QUIC — это новый экспериментальный протокол, который нужен для быстрого подключения к интернету. Основная задача протокола QUIC состоит в поддержке нескольких соединений. Вы можете отключить этот протокол в конфигурации вашего браузера.

Показываем как отключить QUIC на примере браузера Google Chrome:

  • Откройте браузер и введите команду chrome://flags/#enable-quic;
  • В появившемся окне будет выделен параметр: Experimental QUIC protocol (Экспериментальный протокол QUIC). Под названием этого параметра вы увидите выпадающее меню, в котором нужно выбрать опцию: Disable.

  • После этого просто перезапустите браузер.

Этот способ работает и в Windows и в Mac OS.

Отсутствие обновлений операционной системы

Проблемы с SSL-сертификатами могут возникать и из-за того, что на вашей операционной системе давно не устанавливались обновлений. Особенно это касается устаревших версий Windows (7, Vista, XP и более ранние). Установите последние обновления и проверьте работу SSL.

Использование SSL-сертификата версии 3.0

Некоторые сайты используют устаревший SSL-протокол версии 3.0, который не поддерживают браузеры. По крайней мере, по умолчанию. Чтобы браузер поддерживал устаревший SSL необходимо сделать следующее (на примере браузера Google Chrome):

  • Откройте браузер и перейдите в раздел «Настройки».
  • Прокрутите страницу настроек вниз и нажмите «Дополнительные».
  • В разделе «Система» найдите параметр «Настройки прокси-сервера» и кликните на него.
Читайте также:  Windows 10 не дает поставить драйвер

  • Откроется окно. Перейдите на вкладку «Дополнительно».
  • В этой вкладке вы увидите чекбокс «SSL 3.0».

  • Поставьте галочку в чекбоксе, нажмите кнопку «Ок» и перезагрузите браузер.

Ошибки «Invalid CSR» при генерации сертификата из панели управления облачного провайдера

В процессе активации сертификата можно столкнуться с ошибкой «Invalid CSR». Такая ошибка возникает по следующим причинам:

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

I can push by clone project using ssh, but it doesn’t work when I clone project with https.

The error message that shows me is:

18 Answers 18

TLDR:

Long answer

The basic reason is that your computer doesn’t trust the certificate authority that signed the certificate used on the Gitlab server. This doesn’t mean the certificate is suspicious, but it could be self-signed or signed by an institution/company that isn’t in the list of your OS’s list of CAs. What you have to do to circumvent the problem on your computer is telling it to trust that certificate — if you don’t have any reason to be suspicious about it.

You need to check the web certificate used for your gitLab server, and add it to your /bin/curl-ca-bundle.crt .

To check if at least the clone works without checking said certificate, you can set:

But that would be for testing only, as illustrated in «SSL works with browser, wget, and curl, but fails with git», or in this blog post.

Check your GitLab settings, a in issue 4272.

To get that certificate (that you would need to add to your curl-ca-bundle.crt file), type a:

(with ‘ yourserver.com ‘ being your GitLab server name, and YourHttpsGitlabPort is the https port, usually 443 )

To check the CA (Certificate Authority issuer), type a:

Note: Valeriy Katkov suggests in the comments to add -servername option to the openssl command, otherwise the command isn’t showed certificate for www.github.com in Valeriy’s case.

to identify the location of curl-ca-bundle.crt , you could use the command

Also, see my more recent answer «github: server certificate verification failed»: you might have to renistall those certificates:

Certificate validation fails when a certificate has multiple trusted certification paths to root CAs

This article provides workarounds for an issue where security certificate that’s presented by a website isn’t issued when it has multiple trusted certification paths to root CAs.

Original product version: В Windows 7 Service Pack 1, Windows Server 2012 R2
Original KB number: В 2831004

Symptoms

When a user tries to access a secured website, the user receives the following warning message in the web browser:

There is a problem with this website’s security certificate.

The security certificate presented by this website was not issued by a trusted certificate authority.

After the user clicks Continue to this website (not recommended), the user can access the secured website.

Cause

This issue occurs because the website certificate has multiple trusted certification paths on the web server.

For example, assume that the client computer that you’re using trusts Root certification authority (CA) certificate (2). And the web server trusts Root CA certificate (1) and Root CA certificate (2). Additionally, the certificate has the following two certification paths to the trusted root CAs on the web server:

  1. Certification path 1: Website certificate — Intermediate CA certificate — Root CA certificate (1)
  2. Certification path 2: Website certificate — Intermediate CA certificate — Cross root CA certificate — Root CA certificate (2)

When the computer finds multiple trusted certification paths during the certificate validation process, Microsoft CryptoAPI selects the best certification path by calculating the score of each chain. A score is calculated based on the quality and quantity of the information that a certificate path can provide. If the scores for the multiple certification paths are the same, the shortest chain is selected.

When Certification path 1 and Certification path 2 have the same quality score, CryptoAPI selects the shorter path (Certification path 1) and sends the path to the client. However, the client computer can verify the certificate only by using the longer certification path that links to Root CA certificate (2). So the certificate validation fails.

Workaround

To work around this issue, delete or disable the certificate from the certification path that you don’t want to use by following these steps:

Log on to the web server as a system administrator.

Add the Certificate snap-in to Microsoft Management Console by following these steps:

  1. Click Start >Run, type mmc, and then press Enter.
  2. On the File menu, click Add/Remove Snap-in.
  3. Select Certificates, click Add, select Computer account, and then click Next.
  4. Select Local computer (the computer this console is running on), and then click Finish.
  5. Click OK.
Читайте также:  Клонирование образов дисков windows

Expand Certificates (Local Computer) in the management console, and then locate the certificate on the certificate path that you don’t want to use.

If the certificate is a root CA certificate, it is contained in Trusted Root Certification Authorities. If the certificate is an intermediate CA certificate, it is contained in Intermediate Certification Authorities.

Delete or disable the certificate by using one of the following methods:

  • To delete a certificate, right-click the certificate, and then click Delete.
  • To disable a certificate, right-click the certificate, click Properties, select Disable all purposes for this certificate, and then click OK.

Restart the server if the issue is still occurring.

Additionally, if the Turn off Automatic Root Certificates Update Group Policy setting is disabled or not configured on the server, the certificate from the certification path that you don’t want to use may be enabled or installed when the next chain building occurs. To change the Group Policy setting, follow these steps:

Click Start > Run, type gpedit.msc, and then press Enter.

Expand Computer Configuration > Administrative Templates > System > Internet Communication Management, and then click Internet Communication settings.

Double-click Turn off Automatic Root Certificates Update, select Enabled, and then click OK.

ошибка urllib и «SSL: ошибка проверки сертификата»

Я получаю следующую ошибку:

это код, который вызывает эту ошибку:

API, который я использую, требует, чтобы я использовал HTTPS. Как я могу сделать это в обход проверки?

24 ответов:

если вы просто хотите обойти проверку, вы можете создать новый SSLContext. По умолчанию вновь созданные контексты используют CERT_NONE.

будьте осторожны с этим, как указано в разделе 17.3.7.2.1

при непосредственном вызове конструктора SSLContext значение по умолчанию-CERT_NONE. Поскольку он не аутентифицирует другой узел, он может быть небезопасным, особенно в режиме клиента, где большую часть времени вы бы например, чтобы убедиться в подлинности сервера, с которым вы разговариваете. Поэтому, когда в режиме клиента, настоятельно рекомендуется использовать CERT_REQUIRED.

но если вы просто хотите, чтобы он работал сейчас по какой-то другой причине, вы можете сделать следующее, вам придется import ssl а также:

Это должно обойти вашу проблему, но вы на самом деле не решаете ни одну из проблем, но вы не увидите [SSL: CERTIFICATE_VERIFY_FAILED] потому что теперь вы не проверяете сертификат!

To добавьте к вышесказанному, если вы хотите узнать больше о том, почему вы видите эти проблемы, вы захотите взглянуть на PEP 476.

этот PEP предлагает включить проверку подписей сертификатов X509, а также проверку имени хоста для HTTP-клиентов Python по умолчанию, при условии отказа от каждого вызова. Это изменение будет применено к Python 2.7, Python 3.4 и Python 3.5.

есть рекомендуется отказаться, не несходно с моим советом выше:

Он также имеет рекомендуется через monkeypatching который вы не часто видите в python:

который переопределяет функцию по умолчанию для создания контекста с помощью функции для создания непроверенного контекста.

если вы хотите прочитать статью о том, почему не проверка сертификатов плохо в программном обеспечении вы можете найти его здесь!

это не решение вашей конкретной проблемы, но я помещаю его здесь, потому что этот поток является лучшим результатом Google для «SSL: CERTIFICATE_VERIFY_FAILED», и это приводит меня к дикой погоне.

если вы установили Python 3.6 на OSX и получаете ошибку «SSL: CERTIFICATE_VERIFY_FAILED» при попытке подключиться к сайту https://, это, вероятно, потому, что Python 3.6 на OSX вообще не имеет сертификатов и не может проверить какие-либо соединения SSL. Это изменение 3.6 на OSX, и требуется шаг после установки, который устанавливает сертификаты. Это задокументировано в ReadMe, который вы должны найти в /Applications/Python\ 3.6/ReadMe.rtf

ReadMe заставит вас запустить этот скрипт после установки, который просто устанавливает certifi : /Applications/Python\ 3.6/Install\ Certificates.command

чтобы расширить ответ Крейга Гленни (извините, недостаточно репутации для комментариев):

в Python 3.6.1 на MacOs Sierra

ввод этого в терминал bash решил проблему:

В Windows Python не смотрит на системный сертификат, он использует свой собственный, расположенный по адресу ?\lib\site-packages\certifi\cacert.pem .

  1. загрузите сертификат проверки домена как *.crt или * PEM file
  2. открыть файл в редакторе и скопируйте его содержимое в буфер обмена
  3. найти cacert.pem location: from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. редактировать cacert.pem файл и вставьте сертификат проверки домена в конце файл.
  5. сохраните файл и наслаждайтесь запросы!

вы можете попробовать добавить это в переменные среды:

обратите внимание, что это приведет к отключению все проверка HTTP, так что это немного кувалдой подхода, однако если проверка не требуется, это может быть эффективным решением.

1) обновление до Python 3.6.5 с помощью собственного приложения Python installer загруженного с официального сайта языка Pythonhttps://www.python.org/downloads/

Я обнаружил, что этот установщик заботится об обновлении ссылок и символических ссылок для нового Python намного лучше, чем homebrew.

Читайте также:  Start weblogic server windows

2) установить новый сертификат с помощью «./установить сертификат.команда», которая находится в обновленном Python 3.6 каталог

Как я уже писал в комментарии, эта проблема, вероятно, связана с это так ответ.

короче говоря: существует несколько способов проверки сертификата. Проверка, используемая OpenSSL, несовместима с доверенными корневыми сертификатами, которые есть в вашей системе. OpenSSL используется Python.

вы можете попытаться получить недостающий сертификат для Verisign Class 3 Public Primary Certification Authority и затем использовать согласно документация Python:

у меня была аналогичная проблема, хотя я использовал urllib.request.urlopen на в Python 3.4, 3.5 и 3.6. (Это часть Python 3 эквивалент urllib2 , в примечании во главе Python 2’s urllib2 страница документация.)

мое решение было pip install certifi установить certifi , который имеет:

. тщательно отобранная коллекция корневых сертификатов для проверки надежности SSL сертификаты при проверке подлинности узлов TLS.

затем, в моем коде, где я ранее просто имел:

Я пересмотрел его:

на Python 3.4+ on Centos 6/7, Fedora, просто установите доверенный CA таким образом:

  1. скопируйте CA.ЭЛТ до /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract

Я опускаю голову в полу-стыд, так как у меня была та же проблема, за исключением того, что в моем случае URL, который я ударил, был действителен, сертификат был действителен. То, что не было действительным, было моим подключением к сети. Я не смог добавить данные прокси в браузер (т. е. в этом случае). Это остановило процесс проверки от правильного выполнения.
Добавил в детали прокси и мой питон был тогда очень доволен .

как и вы, я использую python 2.7 на моем старом iMac (OS X 10.6.8), я тоже столкнулся с проблемой, используя urllib2.urlоткрыть :

мои программы работали нормально без проблем с сертификатом SSL и suddently (после загрузки программ) они разбились с этой ошибкой SSL.

проблема была версия python используется:

проблема с тем, который установлен инструмент доморощенного : «brew install python», версия, расположенная в /usr/local/bin.

глава, называется Certificate verification and OpenSSL [CHANGED for Python 2.7.9] , in /Applications/Python 2.7/ReadMe.rtf объясняет проблему со многими деталями.

Итак, проверьте, загрузите и поместите на свой путь правильную версию python.

pip install —trusted-host pypi.python.org packagename

Это сработало для меня.

Я удивлен, что все эти инструкции не решили мою проблему. Тем не менее, диагностика правильная (кстати, я использую Mac и Python3.6.1). Итак, подведем итог правильной части:

  • на Mac Apple сбрасывает OpenSSL
  • Python теперь использует собственный набор корневых сертификатов CA
  • Binary Python installation предоставил скрипт для установки корневого сертификата CA, необходимого Python («/Applications / Python 3.6 / Install Сертификаты.команда»)
  • Read » / Applications/Python 3.6 / ReadMe.РТФ» подробности

для меня скрипт не работает, и все эти установки certifi и openssl тоже не удалось исправить. Может быть, потому что у меня есть несколько установок python 2 и 3, а также много virtualenv. В конце концов, мне нужно исправить его вручную.

Если это не вы. Затем повторно установите OpenSSL.

Мне нужно добавить еще один ответ, потому что, как и Крейг Гленни, я отправился в погоню за диким гусем из-за многих сообщений, касающихся этой проблемы в Интернете.

Я использую MacPorts, и то, что я изначально думал, было проблемой Python, на самом деле было проблемой MacPorts: он не устанавливает корневой сертификат с его установкой openssl. Решение заключается в port install curl-ca-bundle , Как указано в этот блог.

/ Applications / Python 3.6 / Install Certificates.команда

вы также можете перейти к приложениям и нажать на сертификаты.команда

Если ваш на vCenter 6, Вы должны вместо этого добавить сертификат центра сертификации vmware вашего vCenter в список доверенных CA вашей ОС. чтобы загрузить Ваш сертификат, выполните следующие действия

  1. откройте веб-браузер.
  2. перейдите к https://
  3. в правом нижнем углу щелкните ссылку Загрузить доверенный корневой ЦС
  1. распакуйте и измените расширение .От 0 до .cer
  2. скопируйте его в /etc/pki / ca-trust / source / anchors/
  3. выполните команду update-ca-trust.

Python 2.7.12 (по умолчанию, 29 июля 2016, 15:26:22) исправлена указанная проблема. Эта информация может помочь кому-то еще.

установка шагов для nltk (у меня был python3 (3.6.2) установлен уже в MAC OS X

используйте опцию игнорировать установленную, чтобы игнорировать удаление предыдущей версии six, иначе она дает ошибку при удалении и не переадресовывает фильм

Проверьте установку pip и python, используйте’ 3 ‘ версии

проверьте, установлен ли NLTK

установите сертификат SSL перед установкой книги примеров, в противном случае мы будем сертификат ошибки при установке примеров

который успешно завершил установку nltk и nltk_ata для книжных примеров

установка PyOpenSSL С помощью pip работал для меня (без преобразования в PEM):

Я решил эту проблему, закрыв Fiddler (прокси-сервер отладки HTTP) проверьте, включен ли у вас прокси-сервер, и повторите попытку.

Python 2.7 на Amazon EC2 с centOS 7

Я должен был установить переменную env SSL_CERT_DIR для ca-bundle который был расположен в /etc/ssl/certs/ca-bundle.crt

в python 2.7 добавление сведений о доверенном корневом ЦС в конце файла C:\Python27\lib\site-packages\certifi\cacert.Пем помог

Оцените статью