c # ClientCertificates.Add () сертификат не прикреплен к httpwebrequest

Я беру самоподписанный сертификат piv auth X509 со смарт-карты, вставленной в USB-ридер, и прикрепляю его к HttpWebRequest с помощью приведенного ниже кода:

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uriInfo);
Request.ClientCertificates.Add(theCert);
Request.Method = "POST";

//get the response back (the mini driver will prompt for a PIN at this point)
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();

Вот что меня смущает, этот код работает на некоторых машинах, но не работает на других. Он работает на Win7 на одной машине и не работает на Win7 на другой, он работает в Win8. Я даже пробовал запускать его на виртуальной машине Win8, которая работает, которая является гостем хост-машины Win7, которая не работает.

Я прочитал много статей о переполнении стека и пробовал много разных вещей, чтобы заставить это работать, но, похоже, ничего не работает. Поскольку мой сертификат не содержит информации о закрытом ключе, кажется, поэтому он не включен в запрос? Это похоже на этот вопрос: HttpWebRequest не кажется для отправки клиентского SSL-сертификата

Поскольку он работает на одних машинах, а не на других, нужно ли это настраивать по-другому на машинах, где он не работает?

Я знаю, что сертификат не прикрепляется из-за какого-то расследования проводов. Сертификат, который я использую, настроен на сервере, поэтому он должен ему доверять (а в некоторых случаях и доверяет).

Некоторые вещи, которые я делаю иначе, чем другие сообщения, - это то, что я получаю сертификат со смарт-карты piv и просто прикрепляю его к запросу. Когда я вызываю GetResponse, минидрайвер Microsoft предлагает ввести PIN-код. Но поскольку сертификат не прикреплен к запросу, я никогда не получаю запрос на ввод PIN-кода, а сервер возвращает ошибку 403 Forbidden.

Любые идеи?

(Это мой первый пост здесь, прошу простить мне все мои грехи)


person jrussID    schedule 01.10.2015    source источник


Ответы (1)


Хорошо, я наконец выяснил, в чем проблема. Я заметил, что когда смарт-карта была вставлена ​​в считыватель, сертификат не был передан в личный магазин. Затем я обнаружил, что за это отвечает служба под названием «Распространение сертификатов».

Я заметил, что служба не работает, и когда я пытался ее запустить, она сразу же прекращала выдавать сообщение,

«Служба распространения сертификатов на локальном компьютере была запущена, а затем остановлена. Некоторые службы останавливаются автоматически, если они не используются другими службами или программами».

После некоторого исследования того, почему эта служба запускается, но не продолжает работать, я обнаружил, что это связано с настройкой групповой политики, спрятанной в реестре. Изменение следующего параметра реестра с 0 на 1 устранило проблему для меня:

HKLM\Software\Policies\Microsoft\Windows\Certprop\CertPropEnabled = 1
person jrussID    schedule 08.10.2015