Привет, Хабр!Сегодня хочу рассказать про боль, которая, думаю, знакома многим, кто хоть раз сталкивался с поддержкой устаревших Windows-систем. А также про то, как небольшая консольная утилита на C# решила проблему, которая годами заставляла меня и моих пользователей хвататься за голову.С чего всё началосьВсё началось с проекта BELPORTAL — набора решений для работы с государственными порталами Беларуси. Среди прочего там есть клиент для доступа к порталам, и вот с ним-то и возникла проблема.Пользователи ставили BELPORTAL на Windows 7, Windows XP, на терминальные серверы — словом, туда, где всё ещё жил старый добрый софт. И примерно через одного получали вот такую картину:Не удается установить защищенное соединение с серверомили на более свежих системах:Ошибка 0x800B0101или классическое:Сертификат сервера не является довереннымПри этом HTTP-сайты открывались, интернет работал, антивирус молчал. Но HTTPS — ни в какую.Диагностика: в чём оказалась проблемаКопнув глубже, я выяснил банальную вещь: устаревшее хранилище корневых сертификатов. Windows хранит список доверенных корневых сертификатов в реестре по пути:HKLM\SOFTWARE\Microsoft\SystemCertificates\ROOT\CertificatesMicrosoft регулярно обновляет этот список через Windows Update. Проблема в том, что:На Windows XP Windows Update для сертификатов уже давно не работает.На Windows 7 обновления сертификатов прекратились с окончанием поддержки.На корпоративных машинах политиками часто отключён Windows Update целиком.На терминальных серверах обновление сертификатов — это отдельный квест.На изолированных системах (POS-терминалы, банкоматы, медицинское оборудование) интернета нет вообще. Читать далее