Вызов Powershell Invoke-RestMethod с использованием сертификата магазина Windows (базовая авторизация?)

Я хотел бы вызвать удаленный веб-сервис Rest с сервера Windows, на котором размещен удаленный сертификат. Я экспортировал сертификат с удаленного сервера и добавил его в хранилище Windwos. (/Personal/myCert)

Я хотел бы использовать его в команде PowerShell Invoke-RestMethod. Ниже приведен код, который я пробовал

# Variables
$Remote_Uri = "https://remote.example.com/service/search"
$Remote_CertificateName = "myCert"
$Remote_ApiKey = "oisdjfSOEDJFKQDfSDKFjsQDKFJ"
$Remote_ContentType = "application/json"
$LocalArtifactPath = "C:\RemoteObjects.json"

# Get Certificate
$Remote_CertificateThumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match $Remote_CertificateName}).Thumbprint;
$Certificate = Get-ChildItem -Path Cert:\LocalMachine\My\$Remote_CertificateThumbprint

# Basic Encoding
$encoding = [System.Text.Encoding]::ASCII.GetBytes($Certificate)
$encodedString = [System.Convert]::ToBase64String($encoding)
$BasicAuth = "Basic " + $encodedString

# Set Headers
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("Authorization", $BasicAuth)
$Headers.Add("api", $Remote_ApiKey)
$Headers.Add("Content-Type", $Remote_ContentType)

# Self-signed certificate
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } 

# Call Rest Service
Invoke-RestMethod -Method Get -Uri $Remote_Uri -OutFile $LocalArtifactPath -Headers $Headers 
Invoke-RestMethod -Method Get -Uri $Remote_Uri -OutFile $LocalArtifactPath -Certificate $Certificate
Invoke-RestMethod -Method Get -Uri $Remote_Uri -OutFile $LocalArtifactPath -CertificateThumbprint $Remote_CertificateThumbprint

# Self-signed certificate off
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null

Три строки с Invoke-RestMethod Команды потерпели неудачу с соответственно:

  • Неверный заголовок (это ожидалось, но я попробовал)
  • Авторизация пуста или схема не является базовой
  • Отпечаток сертификата не найден

У меня есть остальные, работающие с @{"AUTHORIZATION"="Basic Base64Encode(user:pass)"} поэтому я могу сказать, что служба отвечает, но я бы не хотел использовать user: pass в моем скрипте.

Я хотел бы использовать сертификат, который я добавил в Магазин Windows. Мне интересно о двух вещах:

  • Является ли "Базовая" схема авторизации подходящей для использования с сертификатом?
  • В PowerShell, как использовать сертификат из локального магазина Windows с помощью команды Invoke-RestMethod?

Спасибо за помощь

1 ответ

Добавление этого [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 в моем скрипте исправлена ​​проблема "Базовое соединение было закрыто".

Перед этой перекрестной проверкой включается ли IIS в вашей системе.

Другие вопросы по тегам