Windows Curl — Всегда возвращает «Ошибка HTTP 403.16 — Запрещено»

#windows #powershell #curl #command-line

Вопрос:

У меня есть командный сценарий для вызова API .net core, размещенного в IIS, с помощью команды curl. Всякий раз, когда я вызываю API с помощью curl, он всегда возвращается HTTP Error 403.16 - Forbidden (Your client certificate is either not trusted or is invalid.) . Но когда я вызываю тот же API с помощью Postman, он возвращает ответ.

Ниже приведена команда curl:

 curl --request GET "https://my.server.com/api/employees"  

Я попробовал --insecure игнорировать любые проблемы с сертификатами, но это не сработало. С сертификатом SSL и без него он отлично работает с почтальоном. Но из команды curl даже без SSL-сертификата это не работает.

Обновление: Вот полная команда после добавления сертификатов. Я выполняю эту команду в командной строке

 curl --verbose --url https://my.server.com/api/employees --request POST --header @headers.txt --data @request.json --output response.json --cert client.pem:Password1 --key key.pem  

Комментарии:

1. Похоже, веб-api требует сертификата клиента. Используйте либо -Certificate или -CertificateThumbprint для предоставления сертификата клиента, либо разрешите команде выбрать правильный сертификат из вашего личного хранилища сертификатов. Сервер должен доверять выбранному вами сертификату клиента, но если Почтальон работает, это так.

2. @Hazrelle Я предоставил отпечаток пальца сертификата в заголовке, но опять же он выдает ту же ошибку. Тогда я не в состоянии понять, как это работает с Почтальоном. Не могли бы вы, пожалуйста, предоставить какой-либо способ передачи сертификата клиента в запросе?

3. Обычно это происходит с одним из двух уже упомянутых параметров. Я бы проверил загрузку сертификата с его закрытым ключом непосредственно из файла и использовал -Certificate для тестирования. Также проверьте настройки вашего почтальона / Сертификаты / Сертификаты клиента.

4. если вы работаете curl в PoSh 5.1, не удаляя идиотский псевдоним по умолчанию … вы действительно побежите Invoke-WebRequest . если вы хотите запустить util, вам нужно использовать curl.exe .

5. Кроме того, если он работает в Postman, но не в Powershell, может быть интересно просмотреть все заголовки запроса в вашем запросе Postman. Вы могли бы настроить свой запрос немного по-другому?