Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

C:\Users\casta>curl https://c5.ppy.sh
curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.

Я сделал свой собственный центр сертификации и получил сертификат от этого центра сертификации.

Проблема в том, что когда я пытался зайти на сайт с этим сертификатом, он работает нормально!

Но если я попытался с curl или C # приложений, он возвращает ошибку.

Ошибка C # здесь:

2019-02-28T09:20:33: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel
2019-02-28T09:20:33: 위치: #=zGFbxUFU_LnBci6wJmmCy1$E=.#=z0YcFrd6MZP1A()
2019-02-28T09:20:33: 위치: #=zuFHGCPNOLQmjQEcRmqQHLnQ=.#=z3NGNjJ0=()

2 ответа

Я использовал curl через mitm proxy для тестирования пера и получил ту же проблему.

Я наконец-то понял, что curl нужен параметр, который говорит ему не проверять отзыв сертификата, поэтому команда выглядит примерно так:

curl "https://www.example.com" --ssl-no-revoke -x 127.0.0.1:8081

Параметр -x передает данные прокси — вам это может не понадобиться.

7 Июн 2019 в 00:31

Вы можете использовать флаг --ssl и опустить https , как это

curl --ssl c5.ppy.sh

18 Мар 2020 в 11:08

Я пытаюсь клонировать из Github, используя как Github Desktop, так и оболочку git, но продолжаю получать эту ошибку:

Cloning into 'C:\Users\John Doe\workspace\MyProject'...
fatal: unable to access 'https://github.com/JohnDoe/MyProject.git/': 
schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - 
The revocation function was unable to check revocation for the certificate.

Та же проблема при извлечении существующего репозитория.

Я уже пытался загрузить ключи SSH, найденные в ~/.ssh/github-ssh.pub, в настройки Github, но это ничего не помогает.

РЕДАКТИРОВАТЬ: Только что проверено, это произойдет, даже если я попытаюсь клонировать несуществующий репозиторий.

4 ответа

Эта ошибка также часто возникает, когда вы находитесь в корпоративной сети, которая выполняет MITM для всего трафика, а затем блокирует проверку отзыва. Хотя, очевидно, идеальная ситуация — не блокировать проверки (или, по крайней мере, в белый список URL-адресов), может потребоваться решение этой проблемы.

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

Другой вариант, аналогичный второй части ответа Майка, — отключить проверку отзыва.
Последние версии, 2.19 и выше, git-for-windows предоставляют http.schannelCheckRevoke настройка:

Используется для принудительного применения или отключения проверок отзыва сертификатов в cURL когда для http.sslBackend установлено значение «schannel». По умолчанию true, если отключено. Это необходимо только в том случае, если Git постоянно выдает ошибки. и сообщение о проверке статуса отзыва сертификат. Эта опция игнорируется, если cURL не поддерживает установка соответствующей опции SSL во время выполнения.

Обратите внимание, что, в отличие от полного отключения SSL, это по своей сути не менее безопасно, чем использование ответа Майка для конкретных репозиториев: если вы захватываете и настраиваете пустой список отзыва (обычный случай), вы фактически отключили проверку отзыва. Отключение проверки отзыва становится риском только в случае компрометации закрытого ключа (в какой-то момент в цепочке), что бывает редко и сложно.

Также обратите внимание, что в корпоративных настройках MITM проверка отзыва выполняется за вас: ни один достойный прокси-сервер не выдаст сертификат для недействительного или (известного) скомпрометированного сертификата.

6 Ноя 2018 в 17:27

Всегда не рекомендуется отключать проверку сертификата (установив для http.sslVerify значение false).

Я думаю, проблема здесь в том, что при установке git вы решили использовать библиотеку Windows Secure Channel вместо библиотеки OpenSSL :

Git installation options

git config --global http.sslBackend openssl

Кроме того, вы можете переустановить git , указав в процессе библиотеку OpenSSL .

Не забудьте снова включить git SSL-проверку:

git config --global http.sslVerify true

Обновление : если вы используете самозаверяющие или корпоративные сертификаты на собственном сервере git и получаете сообщение об ошибке при попытке подключиться к нему (например, самоподписанный сертификат в цепочке сертификатов или проблема с сертификатом SSL: невозможно получить сертификат местного эмитента ), тогда решение состоит в том, чтобы указать git , где найти < em> CA , который использовался для подписи сертификата этого сайта. Вы можете сделать это с помощью следующей команды конфигурации:

git config --global http.{your site's URL here}.sslcainfo "{path to your cert file}"

Например, если у вас есть локальный сервер git в https://my.gitserver.com/, а CA , который подписал сертификат сайта, находится в C:\Certs\MyCACert.crt, вам необходимо ввести:

git config --global http.https://my.gitserver.com/.sslcainfo "C:\Certs\MyCACert.crt"

Это более надежное решение по сравнению с добавлением сертификата CA в связанный файл git ca-bundle.crt, поскольку этот файл будет перезаписан при следующем обновлении git .

7 Фев 2018 в 21:06

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

26 Июн 2021 в 12:51

Недавно столкнулся с подобной ошибкой в ​​IDE IntelliJ idea, и мне не удалось вытащить код из git. это выдавало ошибку

Не удалось получить доступ к :schannel: next Ошибка InitializeSecurityContext: неизвестная ошибка (0x80092012) — функция отзыва не смогла проверить отзыв сертификата.

Я могу получить код, как только добавлю запись в диспетчер учетных данных Windows (проверьте панель управления) для URL-адреса git и пароля для git.

22 Ноя 2021 в 10:21

Форум КриптоПро

Устаревшие продукты

КриптоПро CSP 3.6

После установки Revocation Provider не работает Lync-клиент

Время на прочтение

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Извлечь максимум из новостей в интернете

Навеяно статьей Почему я по-прежнему пользуюсь RSS

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

Будут скриншоты и, возможно, немного избыточных пояснений.

Будут следующие части:

  • Какую информацию я вообще потребляю через новости;

  • Чтение программами (rss-агрегаторами) — что использую лично я;

  • Форматы RSS и Atom, как их можно обрабатывать программами на локальном компьютере;

  • Автоматизаторы (zapier, ifttt);

  • Как я автоматизировал доставку аудио-подкастов на свой плеер.

Часть 1

Какую информацию я вообще потребляю с помощью новостей

Раньше, когда я много времени проводил в метро по пути на работу и обратно, то загружал новости в свой планшет и потом, уже без интернета спокойно читал то, что было интересно (не все помнят, но интернет в метро был не всегда!). Например, баш и ЖЖ поставляют контент в формате RSS. Новости со всего мира от лента.ру есть в формате RSS. Поговаривают, что в древние времена и твиттер можно было читать через ленту новостей в формате RSS! Но потом пришли жадные менеджеры и сказали, что так они не получат много денег, поэтому RSS исчез из твиттера.

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

Потом обнаружил, что многие другие, интересные мне темы (например, аудиоподкасты) тоже можно отслеживать через ленту новостей. Вот, например, Радио Маяк.

Чтение программами (rss-агрегаторами)

Чтобы читать новости на планшете, можно использовать любую подходящую программу. Благо, их очень много — для Андроида, для Apple и для десктопов.

В какой-то момент пришлось удалить читалку новостей с планшета, т.к. это сильно мешало сну — в постели чтение новостей « перед сном» могло занимать до часа. Но это уже другая история.

Для десктопа я раньше использовал RSS Owl:

Читать также:  Сертификат тр тс 032 2013 о безопасности оборудования работающего под давлением
RSS Owl
RSS Owl

А потом с удивлением открыл для себя продукт от JetBrains: OMEA Reader:

JetBrains OMEA Reader
JetBrains OMEA Reader

Функционал у продукта JetBrains просто космический, поэтому как только я на него перешёл, то уже и не уходил:

  • можно фильтровать новости и по отборам назначать тэги, выделять цветом или выдавать оповещения на экране

  • иерархическая группировка лент новостей

  • и многое-многое другое.

Форматы RSS и Atom, как их можно обрабатывать программами на локальном компьютере

Новости, по сути — это простой xml-файл. Есть формат RSS (очень старый формат, непонятно кто его поддерживает и будет ли он развиваться). Мне он не очень нравится:

  • из-за формата дат — <pubDate>Sun, 28 May 2017 09:00:00 GMT</pubDate>, что затрудняло для меня автоматическую обработку

  • из-за того, что непонятна спецификация RSS, (во всяком случае я нашёл несколько разных вариантов). Расскажу про особенности его обработки дальше. Тем не менее, это самый узнаваемый и устоявшийся формат, известный всем.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

На замену RSS фирма Google придумала свой формат — Atom, и вроде бы даже поддерживает его.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Файлы из интернета, в том числе и новости, можно читать с помощью curl, wget и (почему-бы и нет?) с помощью Power-shell.

Пока писал статью, с удивлением узнал, что в Windows 10 curl уже есть « из коробки » и не надо ничего скачивать и настраивать. Приятно.

chcp 65001  
  
curl ^
  --header "user-agent: cURL automated task" ^
  --output "%TEMP%\updates.xml" ^
  "https://news.webits.1c.ru/news/Updates/atom"

Если на компьютере включен Антивирус Касперского, то можно получить ошибку curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - Функция отзыва не смогла произвести проверку отзыва для сертификата. Я просто отключил антивирус на 5 минут.

Файл записывается без BOM, что может вызвать проблемы с дальнейшей обработкой. Наверное это как-то настроено на сервере.

# file: Get-News-001.ps1  
Clear-Host  
  
$webClient = New-Object Net.WebClient  
$webClient.UseDefaultCredentials = $true  
$webClient.Proxy.Credentials = $webClient.Credentials  
$webClient.Headers.Add("user-agent", "PowerShell automated task")  
  
# Подозреваю, что из-за того, что данные передаются без BOM, то получение данных  
# через DownloadString с последующим выводом выдаст на экран кракозябры.  
# Поэтому в явном виде преобразуем в UTF8  
$newsData = $webClient.DownloadData("https://news.webits.1c.ru/news/Updates/atom")  
  
Write-Host ([System.Text.Encoding]::UTF8).GetString($newsData)

Не забываем, что в power-shell надо включить возможность запуска неподписанных макросов. Это делается или в настройках вашей IDE, или прямо в командной строке, параметром -ExecutionPolicy=RemoteSigned

powershell -file "Get-News-001.ps1" -ExecutionPolicy=RemoteSigned

Что нам это даст? Пока ничего интересного. Но так как новости — это структурированный текст в формате xml, почему-бы не обработать его? Например, найти новость по значению какой-нибудь категории?

Найдём в новостях от 1С новости со значениями категорий « Вид новости обновления=Публикация новой версии» и « Продукт=Комплексная автоматизация»

# file: Get-News-002.ps1
Clear-Host

# Настройки отбора, в виде массива
$CategoryProducts = @(
    # "Продукт=1С:Библиотека стандартных подсистем", # Заполнить!
    "Продукт=Комплексная автоматизация" # Заполнить!
)
$CategoryNewsTypes = @(
    "Вид новости обновлений=Публикация новой версии"
)

$webClient = New-Object Net.WebClient
$webClient.UseDefaultCredentials = $true
$webClient.Proxy.Credentials = $webClient.Credentials
$webClient.Headers.Add("user-agent", "PowerShell automated task")

# Т.к. данные без BOM, то лучше явно преобразовать.
$newsData = $webClient.DownloadData("https://news.webits.1c.ru/news/Updates/atom")
[xml]$news = ([System.Text.Encoding]::UTF8).GetString($newsData)
#[xml]$news = Get-Content -Encoding UTF8 -LiteralPath "$($env:TEMP)\updates.xml"

for($c1=0;$c1 -lt $news.feed.entry.Count;$c1++){
    # Получим новость
    $entry = $news.feed.entry[$c1]
    $ProductName    = ""
    $bFoundProduct  = $false
    $bFoundNewsType = $false
    for($c2=0;$c2 -lt $entry.category.Count;$c2++){
        # Получим и проверим категории новости
        $CategoryProducts | ForEach-Object {
            if($entry.category[$c2].term -eq $_){
                $ProductName = $entry.category[$c2].term
                $bFoundProduct = $true
            }
        }
        $CategoryNewsTypes | ForEach-Object {
            if($entry.category[$c2].term -eq $_){
                $bFoundNewsType = $true
            }
        }
    }
    if ($bFoundProduct -and $bFoundNewsType) {
        Write-Host ("Найдена подходящая новость. УИН: {0}, Заголовок: {1}" -f ($entry.id, $entry.title))
    }

}

Уже интереснее. А что мы можем сделать, если нашли нужную категорию? Например, можно самому себе отправить письмо.

Напишем код сразу так, чтобы письмо о выходе новости не отправлялось несколько раз — в отдельном файлике будем хранить entry.id — уникальный идентификатор новости и дату отправки.

# file: Get-News-003.ps1
Clear-Host

# Файл с информацией об отправленных email.
$sendedEmailsPath = "$($env:TEMP)\sended.csv" # Заполнить!
if(Test-Path $sendedEmailsPath){
    # Файл существует
} else {
    # Файла не существует - создать пустой файл
    Add-Content -LiteralPath $sendedEmailsPath -Encoding UTF8 -Force -Value ""
}
$sendedEmails = Get-Content -LiteralPath $sendedEmailsPath -Encoding UTF8 -Force

# Настройки почты
$CurrentDate        = Get-Date 
$CurrentDate_String = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$From               = "news_center_tester@mail.ru" # Заполнить!
$To                 = "old-coder-75@mail.ru" # Заполнить!
$EncodingUTF8       = [System.Text.Encoding]::UTF8
$UserName           = "news_center_tester" # Заполнить!
$Password           = "*****" # Заполнить!
$Credential         = New-Object -TypeName System.Management.Automation.PSCredential($UserName, (ConvertTo-SecureString $Password -AsPlainText -Force))

$SMTPServer         = "smtp.mail.ru" # Заполнить!
$SMTPPort           = 587 # Заполнить!

# Настройки отбора, в виде массива
$CategoryProducts = @(
    # "Продукт=1С:Библиотека стандартных подсистем", # Заполнить!
    "Продукт=Комплексная автоматизация" # Заполнить!
)
$CategoryNewsTypes = @(
    "Вид новости обновлений=Публикация новой версии"
)

$webClient = New-Object Net.WebClient
$webClient.UseDefaultCredentials = $true
$webClient.Proxy.Credentials = $webClient.Credentials
$webClient.Headers.Add("user-agent", "PowerShell automated task")

$newsData = $webClient.DownloadData("https://news.webits.1c.ru/news/Updates/atom")
[xml]$news = ([System.Text.Encoding]::UTF8).GetString($newsData)
#[xml]$news = Get-Content -Encoding UTF8 -LiteralPath "$($env:TEMP)\updates.xml"

for($c1=0;$c1 -lt $news.feed.entry.Count;$c1++){
    # Получим новость
    $entry = $news.feed.entry[$c1]
    $ProductName    = ""
    $bFoundProduct  = $false
    $bFoundNewsType = $false
    for($c2=0;$c2 -lt $entry.category.Count;$c2++){
        # Получим и проверим категории новости
        $CategoryProducts | ForEach-Object {
            if($entry.category[$c2].term -eq $_){
                $ProductName = $entry.category[$c2].term
                $bFoundProduct = $true
            }
        }
        $CategoryNewsTypes | ForEach-Object {
            if($entry.category[$c2].term -eq $_){
                $bFoundNewsType = $true
            }
        }
    }

    if ($bFoundProduct -and $bFoundNewsType) {

           Write-Host ("Найдена подходящая новость. УИН: {0}, Заголовок: {1}" -f ($entry.id, $entry.title))

        # Проверим, была ли информация уже отправлена по email?
        # Информация об отправке email хранится по каждому id новости в лог-файле $sendedEmailsPath.
        $bEmailWasSent = $false
        foreach ($sendedEmail in $sendedEmails) {
            if ( $sendedEmail.StartsWith($entry.id) ) {
                $bEmailWasSent = $true
                break
            }
        }

        # По этой новости ещё не создавался email.
        if ($bEmailWasSent -eq $false){

            Write-Host "По подходящей новости отправляем емейл..."

            # Отправить почту
            $Subject = $entry.title
            $Body = "<h1>Выход новой версии</h1>" + `
                "<p>" + `
                $entry.summary."#cdata-section" + `
                "</p>"

            Send-MailMessage `
                -From $From `
                -To $To `
                -Body $Body `
                -BodyAsHtml `
                -Credential $Credential `
                -Encoding $EncodingUTF8 `
                -SmtpServer $SMTPServer `
                -Subject $Subject `
                -Priority High `
                -UseSsl `
                -Port $SMTPPort `
                -Verbose
                
            # Записать в лог, чтобы повторно не отправлять почту по этой новости
            $LogString = $entry.id + ";" + $CurrentDate_String + ";"
            Add-Content -LiteralPath $sendedEmailsPath -Encoding UTF8 -Force -Value $LogString

        } else {

               Write-Host "По подходящей новости уже был отправлен емейл."

        }

    }

}

Хм. Не хочется вызывать скрипт ручками. Было бы неплохо это вызывать регулярно, например каждые 2 часа. Настроим «Планировщик заданий». В окне запуска (Win+R) вызовем «taskschd.msc«.

Добавим новое расписание:

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Настроим частоту запуска « каждые 4 часа » (триггер):

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Добавим запуск скрипта (« Действие»):

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Путь к программе powershell.exe надо указывать полный. И в аргументах — или полный путь к скрипту в параметре -file, или заполнить « Рабочая папка».

Немного тюнинга — не люблю всплывающие окна. А при выполнении задания по расписанию, каждые 4 часа вылезает на весь экран окно выполнения скрипта. Можно запускать код power-shell через SilentCMD или CreateProcessHidden. Правда, на последнюю ругается антивирус, но не сильно.

У этого способа проверки новостей есть такой минус — требуется, чтобы этот компьютер был постоянно включен. Поэтому в следующих частях расскажу, как автоматизировать чтение новостей с помощью сервисов автоматизации и как я себе скачиваю подкасты.

Остальные главы постараюсь в ближайшее время выложить.

Отзыв сертификатов не работает

Время на прочтение

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

Сертификаты

Мы сейчас видим настоящую золотую лихорадку вокруг сертификатов, поскольку всё больше сайтов внедряют HTTPS. Кроме очевидных преимуществ безопасности и приватности, есть и другие выгоды от внедрения защищённых соединений, которые я перечислил в статье «Вы всё ещё думаете, что вам не нужен HTTPS?». Обычно именуемые «SSL-сертификаты» или «HTTPS-сертификаты» разлетаются со скоростью, которой мы никогда не видели в истории интернета. Каждый день я исследую сайты из первого миллиона по посещаемости и анализирую различные аспекты их безопасности, а каждые 6 месяцев публикую отчёт. Вы можете изучить эти отчёты здесь, но сейчас посмотрим на темпы внедрения HTTPS.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Процент сайтов из первого миллиона самых популярных сайтов по статистике Alexa, где стоит редирект на версию HTTPS

Мы не просто продолжаем внедрять HTTPS, но скорость внедрения тоже увеличивается. Так выглядит настоящий прогресс. Процесс получения сертификата со временем становится более простым, благодаря великолепному Let’s Encrypt, к тому же ещё и сертификаты стали бесплатными. Если вкратце, мы просто отправляем запрос на получение сертификата (Certificate Signing Request, CSR) в центр сертификации (CA), а тот предлагает доказать факт владения доменом. Обычно это делается с помощью изменения записи DNS TXT или размещения специального кода где-нибудь по случайному URL на нашем домене. Как только задание выполнено, CA выдаёт сертификат, и мы можем предъявлять его браузерам и наслаждаться зелёным замком и указанием HTTPS в адресной строке.

Читать также:  Чем руководствоваться при выборе формы оказания услуги денежная выплата социальный сертификат

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Я написал несколько инструкций по этому процессу, в том числе с чего начать, как грамотно обновить и как использовать двойные сертификаты. Это всё здорово, не правда ли? Но в чём проблема? А проблема возникнет тогда, когда всё пойдёт не по плану и у вас случится плохой день.

Нас хакнули

Никто и никогда не хотел бы услышать эти слова, но реальность такова, что нам приходится их слышать чаще, чем хотелось бы. Хакеры могут получить что угодно, когда у них есть доступ к нашему серверу, и часто им нужен секретный ключ. Сертификаты HTTPS — это публичные документы, которые мы отправляем каждому посетителю нашего сайта, но единственная вещь, которая не позволяет другим использовать такой же сертификат — отсутствие нашего секретного ключа. Когда браузер устанавливает защищённое соединение с сайтом, он проверяет, что у сервера есть секретный ключ для используемого сертификата. Вот почему никто не может использовать наш сертификат. Если хакер получает секретный ключ, то ситуация меняется.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Если злоумышленник завладел нашим секретным ключом, то он может выдать себя за нас. Повторим это: кто-то в интернете может доказать, что он — это вы, хотя в реальности он таковым не является. Это реальная проблема, и прежде чем вы подумаете «Со мной такого никогда не произойдёт», вспомните Heartbleed. Этот крошечный баг в библиотеке OpenSSL позволял злоумышленнику украсть ваш секретный ключ, даже если вы соблюдали все меры безопасности. Кроме этого, было бесчисленное множество случаев, когда секретные ключи утекали из-за случайности или небрежности. Реальность такова, что мы можем потерять наш секретный ключ, а когда это случается, нам требуется способ помешать злоумышленнику использовать наш сертификат. Нужно его отозвать.

Отзыв

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

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Как только мы узнаём о факте взлома, мы связываемся с CA и просим отозвать наш сертификат. Нужно доказать факт владения сертификатом, и как только мы сделали это, то CA помечает сертификат как отозванный. Теперь нужен способ сообщить об этом факте каждому клиенту, которому может потребоваться данная информация. Прямо в этот момент браузер, конечно, ничего не знает, и это проблема. Есть два механизма, которые используются для распространения информации: это список отозванных сертификатов (Certificate Revocation List, CRL) и протокол проверки статуса сертификата (Online Certificate Status Protocol, OCSP).

Списки отозванных сертификатов

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Проблема CRL в том, что списки содержат много сертификатов от конкретных центров сертификации. Не вдаваясь в излишние детали, они разбиваются на промежуточные сертификаты CA, а центр сертификации может выдавать списки меньшими частями, но проблема остаётся той же. У списка CRL немалый размер. Другая проблема в том, что у клиента нет свежей копии CRL, ему нужно запросить её при первоначальном подключении к сайту, что может сделать всю процедуру заметно медленнее. Всё это выглядит не очень приятно, так что посмотрим на OCSP.

Протокол проверки статуса сертификата

OCSP предлагает намного более красивое решение проблемы и имеет значительное преимущество перед CRL. Здесь мы спрашиваем у CA статус единственного, конкретного сертификата. Это значит, что CA должен вернуть только простой ответ: сертификат либо хороший, либо отозван, и такой ответ гораздо меньше по размеру, чем список CRL. Отлично!

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Сертификат для pornhub.com валидный?

Полный сбой

Выше я говорил о CRL и OCSP, двух механизмах проверки сертификатов браузером, и они выглядят таким образом.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

После получения сертификата браузер обратится к одному из этих сервисов и отправит запрос для окончательного выяснения статуса сертификата. А что, если у вашего CA плохой день и его инфраструктура в офлайне? Что, если ситуация выглядит так?

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Частичный сбой

На самом деле сегодня браузеры выполняют так называемую проверку отзыва сертификата с частичным сбоем. То есть браузер попытается проверить статус сертификата, но если ответ не пришёл совсем или не пришёл за короткий промежуток времени, то браузер просто забывает об этом. Ещё хуже, что Chrome даже не пытается проверить сертификат. Да, вы прочитали правильно, Chrome даже не пытается проверить статус сертификата, который ему поступает. Вы можете найти это странным, но я полностью согласен с их подходом и я рад сообщить, что Firefox тоже, вероятно, скоро начнёт работать так же. Позвольте объяснить. Проблема с полным сбоем очевидна: если у CA плохой день, то у нас тоже он будет, вот так мы пришли к логике частичного сбоя. Браузер теперь пытается осуществить проверку сертификата на предмет отзыва, но полностью отказывается от неё, если она занимает слишком много времени или если кажется, что CA ушёл в офлайн. Погодите, какие были последние слова? Проверка сертификата на предмет отзыва отменяется, «если кажется, что CA ушёл в офлайн». Интересно, может ли злоумышленник имитировать такие условия?

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Если вы осуществляете атаку MiTM, то вам нужно всего лишь блокировать запрос на проверку сертификата и создать впечатление, что CA не работает. Браузер тогда столкнётся с частичным сбоем проверки и продолжит радостно использовать отозванный сертификат. Если вас никто не атакует, то каждый раз при проверке этого конкретного сертификата вы тратите время и ресурсы на проверку, что сертификат не отозван. И один раз, когда вас атакуют — тот единственный раз, когда вам по-настоящему нужна такая проверка — злоумышленник просто блокирует соединение, и браузер проходит через частичный сбой. Адам Лэнгли из Google лучше всех описал, что такое отзыв сертификата: это ремень безопасности, который рвётся в момент аварии, и он прав. Вы каждый день садитесь в машину и пристёгиваете ремень безопасности — и он даёт вам приятное и комфортное ощущение безопасности. А потом в один день что-то идёт не по плану — вы попадаете в аварию, и вот тут вы вылетаете в ветровое стекло. В тот единственный раз, когда он действительно нужен, ремень безопасности вас подводит.

Исправление проблемы

Прямо сейчас в данный конкретный момент времени реальность такова, что мы не можем исправить ситуацию. Впрочем, кое-что можно предпринять и, возможно, в будущем механизм отзыва сертификатов станет по-настоящему надёжным.

Проприетарные механизмы

Если сайт скомпрометирован и злоумышленник получил секретный ключ, то он может подделать этот сайт и причинить некоторый вред. Здесь ничего хорошего, но могло быть и хуже. Что если CA скомпрометирован и злоумышленник получил секретный ключ для промежуточного сертификата? Это было бы катастрофой, потому что тогда злоумышленник может подделать буквально любой сайт, который захочет, подписав собственный сертификат. Поэтому вместо онлайновой проверки промежуточных сертификатов на предмет отзыва у Chrome и Firefox есть собственные механизмы для той же задачи.

Читать также:  Как распечатать сертификат о прививке от коронавируса в МФЦ

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

В Chrome он называется CRLsets, а в Firefox — OneCRL. Эти механизмы проверяют списки отозванных сертификатов, объединяя доступные CRL и выбирая оттуда сертификаты. Так проверяются особо ценные сертификаты вроде промежуточных, но что насчёт обычных, наших с вами?

OCSP Must-Staple

Чтобы объяснить, что такое OCSP Must-Staple, нужно сначала вкратце разобраться, что такое OCSP Stapling. Я не хочу здесь вдаваться в лишние подробности, вы можете получить всестороннюю информацию из моего блога по OCSP Stapling, но вот суть. OCSP Stapling избавляет браузер от необходимости отправлять запрос OCSP, выдавая ответ OCSP вместе с самим сертификатом. Это называется OCSP Stapling, потому что сервер должен «скрепить» (staple) ответ OCSP с сертификатом и выдать их вместе.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

На первый взгляд это кажется немного странным, потому что сервер как будто «сам удостоверяет» собственный сертификат как неотозванный, но всё работает правильно. Ответ OCSP действует только короткий промежуток времени и подписан CA точно так же, как сертификат. Так что если браузер может удостовериться, что сертификат подписан CA, то точно так он может удостовериться, что ответ OCSP тоже подписан этим CA. Это устраняет большую проблему приватности и избавляет клиента от бремени выполнять внешний запрос. Лучший вариант! Но на самом деле не лучший, извините. OCSP Stapling — отличная вещь, и все мы должны поддерживать эту технологию на своих сайтах, но действительно ли мы думаем, что её будет поддерживать злоумышленник? Нет, я так не думаю, конечно же он не будет этого делать. Что нам на самом деле нужно — так это заставить сервер поддерживать OCSP Stapling, и вот для чего нужен OCSP Must-Staple. При запросе нашего сертификата у CA мы просим его установить на нём флаг OCSP Must-Staple. Этот флаг указывает браузеру, что сертификат должен поставляться с откликом OCSP или он будет отвергнут. Установить флаг легко.

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

После установки этого флага мы должны гарантировать, что используется OCSP Staple, иначе браузер отвергнет сертификат. В случае компрометации, если злоумышленник получит наш ключ, ему также придётся использовать OCSP Staple вместе с нашим сертификатом, а если он не включит OCSP Staple, то ответ OCSP скажет, что сертификат отозван, и браузер его не примет. Тада!

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

OCSP Expect-Staple

Хотя Must-Staple кажется отличным решением проверки отзыва сертификатом, это не совсем так. На мой взгляд, одной из самых больших проблем является то, что я как оператор сайта не могу точно знать, насколько надёжны метки OCSP Staple и как их принимает клиент. Без включенного OCSP Must-Staple это не является проблемой, но если включить OCSP Must-Staple и мы не уверены в надёжности или правильности OCSP Staple, это проблема для сайта. Чтобы попытаться и получить некую обратную связь о качестве меток OCSP Staple, мы можем активировать функцию под названием OCSP Expect-Staple. Я писал о ней раньше, и вы можете узнать все подробности в блоге OCSP Expect-Staple, но здесь тоже объясню вкратце. Вдобавок к списку предзагрузки HSTS вы запрашиваете браузер прислать отчёт, удовлетворён ли он меткой OCSP Staple. Вы можете собирать отчёты сами или использовать мой сервис report-uri.io, в обоих случаях вы точно узнаете, когда ваш сайт столкнулся с проблемами при работе OCSP Must-Staple. Поскольку использование списка предзагрузки HSTS не настолько очевидно, как мне бы хотелось, я также написал спецификацию для определения нового заголовка безопасности под названием Expect-Staple, чтобы обеспечивать ту же функциональность ценой меньших усилий. Идея в том, что теперь вы можете установить этот заголовок и включить функцию отправки отчётов, которые так нам нужны, ещё до активации Must-Staple. Установка заголовка будет простой, как и всех остальных заголовков безопасности:

Expect-Staple: max-age=31536000; report-uri="https://scotthelme.report-uri.io/r/d/staple"; includeSubDomains; preload

Поддельные сертификаты

Если мы говорим об отзыве сертификатов, то должны рассмотреть тему их подделки. Если некто пытается скомпрометировать CA или как-то ещё получить сертификат, который ему не положен, то как он будет действовать? Если я прямо сейчас взломаю CA и получу сертификат на ваш сайт, то вы не узнаете об этом до тех пор, пока об этом не сообщат в новостях. У вас в компании даже может быть инсайдер, который получит сертификат в обход внутренних процедур, и он будет делать с ним всё что захочет. Нам нужна стопроцентная прозрачность, и скоро мы её получим. Это Certificate Transparency.

Certificate Transparency

Ошибка 0x80092012 функция отзыва не смогла произвести проверку отзыва для сертификата

Авторизация центров сертификации

Предотвратить выдачу сертификата намного проще, чем пытаться отозвать его, и именно для этого нужна авторизация центров сертификации (CAA). Опять же, подробности есть в статье по ссылке, но вкратце суть в том, что мы можем авторизовать только конкретные центры сертификации выдавать нам сертификаты, в отличие от нынешней ситуации, когда мы не можем указать вообще никаких предпочтений. Авторизация делается так же просто, как создание записи DNS:

scotthelme.co.uk. IN CAA 0 issue "letsencrypt.org"

Хотя авторизация CA — не особенно сильный механизм, и он не способен помочь во всех ситуациях некорректной выдачи сертификатов, но в некоторых случаях он полезен, так что следует заявить о своих предпочтениях, создав запись CAA.

Заключение

В настоящий момент существует реальная проблема, что мы не можем отозвать сертификат, если кто-то получил наш секретный ключ. Только представьте, во что это выльется при раскрытии следующей глобальной уязвимости масштаба Heartbleed! Одна вещь, которую вы можете попытаться сделать — это ограничить размер ущерба от утечки, сократив срок действия своего сертификата. Вместо трёх лет указывайте один год или даже меньше. Let’s Encrypt выдаёт только сертификаты, которые действительны всего лишь 90 дней! С сокращением времени жизни вашего сертификата у злоумышленника будет меньше времени для злоупотреблений. Кроме этого мы мало что можем сделать.

Я бы хотел закончить статью вопросом: следует ли нам исправлять процедуру отзыва сертификатов? Впрочем, это тема для другой статьи.

Пожалуйста, помогите мне разобраться с самозаверяющей проверкой отзыва, которую я использовал makecert.exe создать корневой и клиентский сертификат

Проблема в том, что certutil не может проверить сертификат с ошибкой The revocation function was unable to check revocation for the certificate. 0x80092012Вот параметры команды, которые я использовал для создания root

makecert.exe -sky signature -pe -n CN=XML_ROOT_TEST -r -sv rootMyCA.pvk -sr LocalMachine -ss Root rootMyCA.cer

и сертификат клиента

makecert -pe -ic rootMyCA.cer -n "CN=XML_SIGN_TEST_CERT" -is Root  -sv xml_sign_test.pvk -b 01/09/2017 -e 01/09/2019 xml_sign_test.cer

pvk2pfx -pvk xml_sign_test.pvk -spc xml_sign_test.cer -pfx xml_sign_test.pfx -f

Тогда я пытался бежать

certutil -verify -urlfetch d:\Tests\xml_sign_test.cer

но это не удается

The revocation function was unable to check revocation for the certificate. 0x80092012 (-2146885614 CRYPT_E_NO_REVOCATION_CHECK) 
Revocation check skipped -- no revocation information available  
Cannot check leaf certificate revocation status  
CertUtil: -verify command completed successfully.

Я попытался использовать makecert и создать список отзыва crl, как показано ниже

makecert -crl -n CN=XML_ROOT_TEST -sv rootMyCA.pvk rootMyCA.crl

затем я импортировал этот список на локальный компьютер \ доверенные корневые центры сертификации, но не повезло, certutil по-прежнему не удается

Как правильно создать список crl? Можно ли создать сертификат x509 без проверки отзыва с помощью makecert?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *