Запрос REST с использованием PFX через Keystore выполняется иначе, чем через новый X509 - PullRequest
0 голосов
/ 08 января 2019

Попадание в интересную ситуацию, когда выполнение вызова REST через WebHttpRequest приводит к двум различным сценариям аутентификации, в зависимости от того, как устроен PFX.

В любом сценарии используется один и тот же PFX.

Вот 2 сценария ассоциации сертификатов:

  1. PFX загружается через new X509Store(StoreName.My, StoreLocation.LocalMachine); с последующим поиском сертификата (в данном случае по значку миниатюры) - затем сертификат присоединяется через request.ClientCertificates.Add(certificate); - Важно отметить, что в этом сценарии парольная фраза опущена, и процесс не жалуется.
  2. PFX загружается через new X509Certificate2(_certPath, _passphrase); - пропуск этой парольной фразы приведет к ошибке 'The specified network password is not correct', при которой указанная парольная фраза и все поступит так, как предполагалось.

Конечная точка, к которой осуществляется доступ, выполняет своего рода инициализацию пользователя, структурированную вокруг проверки подлинности Windows (NTLM), однако непосредственное взаимодействие с процессом NTLM (моим кодом) не выполняется, так как все это обрабатывается нежелательным черным ящиком, составляющим собственность это сторонний сервис.

Результирующая разница между двумя сценариями такова:

1: (Сценарий 1) запрос принят и предоставлен полный уровень обеспечения, как и ожидалось.

2: (Сценарий2) запрос принят, но предоставлен уменьшенный, меньший уровень обеспечения.

Возможная цель : Сценарий 2 работает номинально, как Сценарий 1.

Почему бы просто не опираться на сценарий 1? : я пытаюсь контейнировать этот процесс - и для обеспечения этого приложения в многоуровневых средах я планирую, чтобы оно получало все сертификаты в работоспособном контейнере приложения делают: через ENV vars (особые секреты Docker) - как таковые, StoreName.My / StoreLocation.LocalMachine на самом деле не вариант (по крайней мере, до dotnetcore 3.0, я думаю, что я видел через проблемы corefx github?)

Мой вопрос (ы) :

  • Какой шаг я пропускаю в контексте WebHttpRequest, который заставляет один и тот же сертификат и конечную точку работать по-разному, является ли сертификат частью хранилища ключей локальной системы по сравнению с тем, когда он подается вручную через путь к файлу?

  • Можно ли использовать PFX таким образом?

Приемлемый ответ Примечания: Допустимо использование рукопожатия, я ценю, что здесь нет примера кода, я хотел бы лучше понять, как Windows, PFX-сертификаты и .net (в идеале dotnetcore 2.1) имеют некоторые более чем очевидные (для меня) рабочие отношения и какие варианты доступны для меня, с надеждами на достижение моей цели (см. непосредственно ниже).

Чего я, в конечном счете, пытаюсь избежать : заставить процесс сборки docker выполнить COPY сертификата в /etc/ssl/certs - потому что я не хочу, чтобы мое имя использовалось в образах докеров, которые поставляются в комплекте с public & privatekey PEM файлы.

Я упаковал довольно много приложений Node, Java, Php и Python, а также это приложение на C #, однако впервые приходится сталкиваться с необходимостью сделать это с PFX

I am открыт для других предложений, которые не включают размещение сертификата, содержащего закрытый ключ и доверие, к образу контейнера. Только открытый ключ / crt, будет приемлемым.

Попробованы дополнительные биты : - Установка политики делегата на ServicePointManager - и различные другие параметры TLS, связанные с ServicePointManager - Создание временного хранилища X509 и его уничтожение при завершении работы приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...