Как установить цепочку сертификатов клиентов в WinHttp
Я работаю над клиент-серверным приложением, где сервер является веб-сервером, который выполняет проверку клиента на основе сертификата SSL. Сервер доверяет корневому сертификату ЦС. Клиент - это приложение Windows, разработанное в C++, которое имеет сертификат, подписанный промежуточным CA, который, в свою очередь, подписан Root CA. Я могу установить клиентский сертификат во время соединения https, вызывая WinHttpSetOption api с параметром WINHTTP_OPTION_CLIENT_CERT_CONTEXT. Однако это установит только клиентский сертификат, но не всю цепочку. Сервер не имеет промежуточного ЦС в своем хранилище, следовательно, он не может аутентифицировать клиента.
Есть ли способ установить полную цепочку сертификатов клиентов в WinHttp, если полная цепочка уже присутствует в хранилище сертификатов клиента?
Сервер должен иметь сертификат ЦС заранее, он не будет доверять корневому ЦС, который клиент передает ему. (Я не уверен, будет ли это (серверная сторона) доверять промежуточному ЦС, подписанному доверенным ЦС, но моя склонность говорит нет).
Доверяя некоторым случайным ЦС, отправленные клиентом, нарушат всю точку проверки сертификата, вы бы не имели представления о том, действительно ли данные, представленные клиентом, имеют смысл. Поэтому добавьте корневые и промежуточные сертификаты CA в хранилища сертификатов сервера. (Если у вас нет доступа к этому, вам придется поговорить с администратором и заставить их это делать).
Только я мог найти это, чтобы добавить Sub CA в системный магазин. Во время запуска или установки сервиса откройте хранилище сертификатов ЦС и добавьте контекст сертификата.