Доверие самоподписанному сертификату в вызове Invoke-WebRequest - PullRequest
0 голосов
/ 22 мая 2019

Вопрос

Есть ли способ, которым я могу позвонить Invoke-WebRequest и, например, ожидать, что данный открытый ключ сертификата подтвердит, что я доверяю соединению?

Если нет, есть ли другой способ вызвать веб-запрос и доверять только веб-странице, не доверяя издателю или игнорируя проверку сертификата?

Проблема

Я хочу загрузить веб-страницу с Invoke-WebRequest. Я пытаюсь подключиться к веб-странице через https, и сервер предлагает самозаверяющий сертификат.

Поскольку у меня нет сертификата эмитента в моем хранилище сертификатов, Invoke-WebRequest выдаст ошибку:

Invoke-WebRequest: удаленный сертификат недействителен в соответствии с процедурой проверки.

Известные обходные пути

  1. Использование -SkipCertificateCheck -Switch, добавленного в Powershell v6.0.0 ref
  2. Добавление нового сертификата, чтобы доверять всем сертификатам ref
  3. Доверяя Эмитент-Сертификат

То, что я пытался, но не получилось

  1. Добавление сертификата веб-страницы в хранилище сертификатов без доверия к сертификату эмитента
  2. Добавление сертификата веб-страницы в хранилище сертификатов и использование -Certificate -Параметра Invoke-WebRequest для указания этого сертификата

PS: поскольку эта проблема возникает как в Powershell <5, так и в Powershell Core, я помечаю оба. </em>

1 Ответ

1 голос
/ 22 мая 2019

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

Для самозаверяющих сертификатов, поскольку они не являются доверенными, вы правы, на самом деле у клиента есть только 2 варианта:

  1. Игнорировать происхождение сертификата и вслепую подключаться с помощью переключателя -SkipCertificateCheck.
  2. Примите, что эмитент и полная цепочка можно доверять, и импортируйте сертификат

Вы не можете обойти этот фундаментальный факт. Мне нравится использовать пример: самозаверяющие сертификаты - это все равно, что доставлять объект в форме бомбы клиенту с наклейкой на нем: «Не бомба - поверь мне, я @Paxz». Цепочки сертификатов похожи на удерживаемые в форме бомбы объекты, вы смотрите на водителя доставки, они выглядят очень тенистыми и в то же время совсем не похожи на @Paxz. Затем у вас есть выбор: либо игнорировать наклейку, либо принять, что я могу доверять @Paxz и сомнительному водителю доставки. Вы не можете просто протолкнуть пакет через входную дверь без явного согласия. Когда вы доверяете всей цепочке, на наклейке будет написано: «Не бомба - поверьте мне, я был проверен экспертами по бомбам», так как вы доверяете экспертам по бомбам, клиент примет пакет без вопросов.

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