Несподівана особливість перевірки сертифікатів у Windows

Несподівана особливість перевірки сертифікатів у Windows

Трохи затягнув з публікацією, але краще пізно ніж ніколи. На початку робочого тижня з'явилися затримки при підключенні по RDP до всіх комп'ютерів, воно підвисало на кілька секунд в стадії «Securing remote connection»..., яка відповідає за встановлення шифрованого каналу для безпечної передачі реквізитів.

TL;DR

При закінченні терміну дії CTL і недоступності ctldl.windowsupdate.com можливі затримки при встановленні SSL-з'єднань, намагайтеся цього уникати.

Так як для RDS використовуються сертифікати від внутрішнього CA і вже колись забувши оновити CRL кореневого офлайнового CA вирішив перевірити його здоров'я в pkiview.msc.

Оснастка показала, що все OK, але навпроти обох CA кілька секунд тримався статус Verifying, що дивно, оскільки всі дані для перевірки доступні всередині домену через LDAP і HTTP. Перевірка через certutil -verify також підвисала на 10-15 секунд у стадії CERT_CHAIN_POLICY_BASE, причому з будь-якими сертифікатами - не тільки від внутрішніх, а й від зовнішніх CA (StartCom, Comodo тощо).

Проблема не пішла і після перереєстрації сертифікатів з CRL в CDP і AIA. Зневірившись, захопив мережевий дамп під час виконання certutil -verify і побачив там наступне:

Трейс до ctldl.windowsupdate.com показав zapret.comcor.ru в дорозі, а його IP-адреса (CDN Akamai) виявився доданий 01.08.2016 до реєстру блокування РКН.

Виявляється в Windows 8.1 (і пізніше портований в Vista, 7 і 8) з'явився механізм динамічного завантаження списків довірених і недовірених посвідчуючих центрів (CTL) на випадок появи нових або їх компрометації. Коли термін дії добігає кінця, клієнт намагається оновити CTL і якщо це не вдається, спроба повторює при кожній установці SSL-з'єднання.

Переглянути вміст і перевірити стан CTL можна командами certutil -f -verifyCTL AuthRoot і certutil -f -verifyCTL Disallowed. Також цими командами можна відновити вміст сховища сертифікатів.

Списки завантажуються з адреси ctldl.windowsupdate.com, але у провайдера зламалася сторінка-заглушка і з'єднання до заборонених ресурсів блокувалися за IP-адресою, що викликало таймаут в 15 секунд при установці кожного з'єднання.

Детальний опис нового механізму є на TechNet, для обхідного вирішення таймаут можна задати через групові політики в розділі Public Key Policies > Certificate Path Validation Settings > Network Retreival:

Поки гуглив опис механізму натрапив на блог дослідника, де він описує алгоритм роботи на прикладі своєї утиліти CTLInfo, яка вміє показувати вміст і термін дії CTL.

logo