Вы здесь

Спасибо Let’s Encrypt!

       Спасибо Let’s Encrypt, я не знал как занять этот день! Но ты с успехом решил эту проблему, о чем мы здесь и поведаем.
       Еще в марте этого года поднимая веб-приложение на базе IIS мы снабдили наш сервер сертификатом от Let's Encrypt. На тот момент особо не разбираясь в технологии работы этого сервиса, мы воспользовались официальным клиентом на Linux, получили сертификат, водрузили его на IIS и успокоились. Почти на три месяца. За это время Let's Encrypt закончил beta-тестирование, запустился продакшн и заработал с горем пополам клиент под Windows. Чем мы собственно и воспользовались. Он может работать как в ручном режиме так и на "автомате", получать сертификат и подсовывать его сразу в IIS  - и это уже более-менее удобно с учетом максимального срока действия сертификата в три месяца.
       Итак автоматический режим получилось использовать, получив всего одну ошибку о сбое при удалении старого сертификата. Не проблема, подумали мы и пошли проверять работу сайта. И вот тут обнаружился подвох - полученный сертификат отображается как действительный, но клиентские машины в упор отказываются это воспринимать, выдавая ошибку "Не удалось проверить не был ли отозван этот сертификат". Более того при перезагрузке сервера к нему в упор не удавалось подключиться по RDP. Хорошо, что это виртуальная машина!
       Начали разбираться... Понятно, что клиент обращаясь к серверу не может получить список отозванных сертификатов. Но почему? Ведь сертификат выдан нормальным центром сертификации, который до этого выдавал старый сертификат и с ним все было хорошо. То есть вроде бы ЦС и ни при чем? Но как оказалось - почти. После ковыряния ошибок, MSDN и прочих форумов , наткнулись на замечательную ветку на гитхабе Let's Encrypt с заголовком "Missing Chain Cert", где народ натыкается на схожую проблему и решается она достаточно просто. Оказалось, что клиентская часть Lets Encrypt под Windows обращается за сертификатом к промежуточному ЦС "Let's Encrypt Authority X3". В то время как ранее установленый сертификат был получен с ЦС "Let's Encrypt Authority X1". Между ними по идее разницы никакой нет, но оба они в качестве корневого используют один и тот же ЦС. Получается как бы петля, IIS почему то не может правильно сформировать цепочку сертификатов. Клиент видит, что сертификат выдан "Let's Encrypt Authority X3", а цепочка сертификата включает в себя "Let's Encrypt Authority X1", за списком отозванных сертификатов лезет туда же и получает мягко говоря "дулю" со всеми вытекающими.           Как мы уже и говорили, решение простое - на сервере нужно удалить сертификат одного из промежуточных центров сертификации, конкретно "Let's Encrypt Authority X1". Причем надо не забыть это сделать из всех хранилищ сертификатов - как "локального компьютера", так и у пользователя (у нас в результате экспериментов он там тоже оказался).