(Размещено в ServerFault вместо StackOverflow, потому что я считаю, что это касается конфигурации ОС больше, чем кода программирования).
В настоящее время я отвечаю за обслуживание системы, которая подключается к стороннему веб-сервису. Этот веб-сервис требует сертификатов аутентификации клиента, что достаточно справедливо, но сам веб-сервис защищен самозаверяющим сертификатом, созданным самостоятельно созданным корневым сертификатом центра сертификации - тем же самым корнем, который создает сертификаты аутентификации клиента.
Достаточно просто добавить текущий сертификат службы в список заведомо доверенных и игнорировать самостоятельно созданный сертификат центра сертификации, к сожалению, сертификат службы регулярно меняется, поэтому сертификат центра должен быть доверенным, чтобы гарантировать, что приложение не сломается, когда сервисный сертификат обновлен.
Однако я (лично) не доверяю сертификату CA, основываясь на моем опыте работы с компанией, запускающей веб-сервис - меня не удивит, если он просочится в Интернет, и, что вызывает беспокойство, сертификат CA не имеет ограничений на использование ключей, наложенных на это (хотя внешние атаки MITM возможны, хотя и отдаленные, меня больше беспокоит утечка сертификата, используемого, например, для подписи кода).
Могу ли я сказать своему компьютеру (в настоящее время это серверный ящик, но в будущем - обычные клиентские ящики для настольных компьютеров) доверять ЦС, но только для заданного набора ключей и небольшого набора возможных имен субъектов (доменных имен )?
В настоящее время сервером является Windows Server 2012 R2, но он может работать на компьютере с Linux, хотя все настольные компьютеры - это компьютеры с Windows.
Да, это возможно. В случае с Windows есть функция под названием Cross-Certification или Qualified Subordination.
Идея состоит в том, что вы подписываете сертификат CA третьей стороны в своей среде. В результате удаленный сертификат SSL привязывается к вашему собственному корневому сертификату ЦС. Чтобы защитить себя от возможных мошеннических сертификатов, вы реализуете Name Constraints
расширение сертификата, в котором вы указываете список допустимых имен. Если сторонний CA выдает сертификат для любого другого имени (явно не указанного в расширении Name Constraints), он будет автоматически отклонен вашим поставщиком CryptoAPI.
В дополнение к ограничениям имени вы можете описать ограничение расширенного использования ключей, указав Application Policies
расширение сертификата в кросс-сертификате. Таким образом, ваш провайдер доверия успешно проверит только использование, указанное в Application Policies
расширение.
Больше информации: Планирование и реализация перекрестной сертификации и квалифицированного подчинения с использованием Windows Server 2003
p.s. хотя статья написана против Windows Server 2003, статья по-прежнему применима к самой последней версии Windows Server.